Tôi tưởng tượng câu hỏi này hoặc các biến thể của nó được chuyển qua rất nhiều, vì vậy nếu những gì tôi nói là trùng lặp và câu trả lời nằm ở nơi khác, vui lòng thông báo cho tôi.Xử lý sự kiện trong thiết kế công cụ trò chơi dựa trên thành phần
Tôi đã nghiên cứu thiết kế công cụ trò chơi và đã bắt gặp mô hình thực thể dựa trên thành phần. Nghe có vẻ đầy hứa hẹn, nhưng tôi vẫn đang triển khai thực hiện.
Tôi đang xem xét một hệ thống nơi động cơ được sắp xếp một số "hệ thống phụ", quản lý một số khía cạnh, như hiển thị, âm thanh, sức khỏe, AI, v.v. Mỗi hệ thống con có loại thành phần liên kết với nó. thành phần cho hệ thống con y tế. Một "thực thể", ví dụ như một NPC, một cánh cửa, một số hiệu ứng hình ảnh hoặc trình phát, chỉ đơn giản bao gồm một hoặc nhiều thành phần, khi cùng nhau cung cấp cho thực thể chức năng của nó.
Tôi đã xác định bốn kênh thông tin chính: một thành phần có thể phát tới tất cả các thành phần trong thực thể hiện tại, một thành phần có thể phát tới hệ thống con, một hệ thống con có thể phát tới các thành phần của nó và hệ thống phụ có thể phát tới các hệ thống phụ khác.
Ví dụ: nếu người dùng muốn di chuyển ký tự của họ, họ sẽ nhấn một phím. Nhấn phím này sẽ được chọn bởi hệ thống con đầu vào, sau đó phát sóng sự kiện và sẽ được chọn bởi hệ thống con của trình phát. Hệ thống con của trình phát sau đó gửi sự kiện này tới tất cả các thành phần của trình phát (và do đó các thực thể mà các thành phần đó tạo), và các thành phần trình phát đó sẽ liên lạc với thành phần vị trí của thực thể riêng của nó để tiếp tục và di chuyển.
Tất cả điều này cho một lần nhấn phím có vẻ hơi bị cuộn và tôi chắc chắn sẽ mở để cải thiện kiến trúc này. Nhưng dù sao, câu hỏi chính của tôi vẫn theo sau.
Đối với chính các sự kiện, tôi đã xem xét vị trí một sự kiện hoạt động như trong mẫu khách truy cập. Tầm quan trọng của những gì tôi muốn là nếu một sự kiện đi qua một thành phần nó không hỗ trợ (như trong một sự kiện di chuyển không có gì trực tiếp để làm với AI hoặc sức khỏe), nó sẽ bỏ qua các thành phần. Nếu một sự kiện không tìm thấy thành phần nó đang diễn ra, điều đó không quan trọng.
Mẫu khách truy cập hầu như hoạt động. Tuy nhiên, nó sẽ yêu cầu tôi có các chức năng ảo cho mọi loại thành phần (ví dụ: truy cập HealthComponent, visitPositionComponent, v.v.) ngay cả khi nó không có liên quan gì đến chúng. Tôi có thể để trống các hàm này (vì vậy nếu nó đi qua các thành phần đó, nó sẽ bị bỏ qua), nhưng tôi sẽ phải thêm một hàm khác mỗi khi tôi thêm một thành phần.
Hy vọng của tôi là tôi có thể thêm thành phần mà không nhất thiết phải thêm nội dung vào các địa điểm khác và thêm sự kiện mà không gây rối với các nội dung khác.
Vì vậy, hai tôi hỏi:
- Có bất kỳ cải tiến thiết kế của tôi có thể cho phép, về mặt hiệu quả, linh hoạt, vv?
- Cách tối ưu để xử lý sự kiện là gì?