Chà, tôi biết rằng bài đăng này khá cũ, nhưng tôi không thể cưỡng lại.
Gần đây tôi đã xây dựng một công cụ trò chơi. Nó sử dụng các thư viện bên 3d để kết xuất và vật lý, nhưng tôi đã viết phần cốt lõi, định nghĩa và xử lý các thực thể và logic trò chơi.
Động cơ chắc chắn theo một cách tiếp cận truyền thống. Có một vòng cập nhật chính gọi chức năng cập nhật cho tất cả các thực thể. Va chạm được báo cáo trực tiếp bằng cách gọi lại trên các thực thể. Giao tiếp giữa các thực thể được thực hiện bằng cách sử dụng con trỏ thông minh trao đổi giữa các thực thể.
Có một hệ thống tin nhắn nguyên thủy, Điều đó chỉ xử lý một nhóm nhỏ thực thể cho các thông điệp động cơ. Những thông báo đó được ưu tiên xử lý khi kết thúc tương tác trò chơi (ví dụ là tạo hoặc hủy thực thể) vì chúng có thể gây rối với danh sách cập nhật. Vì vậy, vào cuối mỗi vòng lặp trò chơi, một danh sách nhỏ các tin nhắn được tiêu thụ.
Mặc dù hệ thống thông điệp nguyên thủy, tôi sẽ nói rằng hệ thống này chủ yếu là "cập nhật dựa trên vòng lặp".
Tốt. Sau khi sử dụng hệ thống này, tôi nghĩ rằng nó rất đơn giản, nhanh chóng và được tổ chức tốt. Logic trò chơi có thể nhìn thấy và khép kín bên trong các thực thể, không năng động như một thông điệp. Tôi thực sự sẽ không làm cho nó bị điều khiển bởi vì theo ý kiến của tôi, các hệ thống sự kiện đưa ra sự phức tạp không cần thiết cho logic trò chơi và làm cho mã trò chơi trở nên rất khó hiểu và gỡ lỗi.
Nhưng, tôi cũng nghĩ rằng một hệ thống "cập nhật dựa trên vòng lặp" thuần túy như của tôi cũng có một số vấn đề.
Ví dụ: Trong một số thời điểm, một thực thể có thể ở trạng thái "không làm gì cả", có thể đang chờ người chơi tiếp cận hoặc một cái gì đó khác. Trong hầu hết các trường hợp đó, thực thể đốt cháy thời gian của bộ xử lý mà không có gì và tốt hơn là tắt thực thể đó và bật nó khi một sự kiện nào đó xảy ra.
Vì vậy, trong công cụ trò chơi tiếp theo của tôi, tôi sẽ áp dụng một cách tiếp cận khác. Các thực thể sẽ tự đăng ký cho các hoạt động của động cơ, như cập nhật, vẽ, phát hiện va chạm và như vậy. Mỗi sự kiện này sẽ có danh sách các giao diện thực thể riêng biệt cho các thực thể thực tế.