Tôi biết câu hỏi này đã được hỏi nhiều lần, nhưng tôi vẫn không chắc cách triển khai xử lý đầu vào trong một công cụ dựa trên thành phần.
Thiết kế dựa trên thành phần mà tôi đã sử dụng dựa trên loạt blog của T = Machine và trên Artemis trong đó Thực thể chỉ là id.
Có ba ý tưởng chính tôi có trong việc thực hiện xử lý đầu vào:
- Thành phần đầu vào sẽ tổ chức các sự kiện mà nó quan tâm. Hệ thống đầu vào sẽ dịch các sự kiện phím và chuột sang các sự kiện trò chơi và lặp qua các thực thể với thành phần đầu vào và nếu chúng quan tâm đến sự kiện đó, hệ thống đầu vào sẽ thực hiện một hành động thích hợp. Hành động này sẽ được mã hóa cứng cho hệ thống đầu vào.
- Không có thành phần đầu vào. Bạn sẽ đăng ký các thực thể với các sự kiện cụ thể cho hệ thống đầu vào. Sau đó, hệ thống đầu vào sẽ gửi tin nhắn (với id thực thể và loại sự kiện) đến các hệ thống khác để chúng có thể thực hiện hành động thích hợp. Hoặc như trong trường hợp đầu tiên, các hành động sẽ được mã hóa cứng cho hệ thống đầu vào.
- Tương tự như phương thức đầu tiên, nhưng thay vì mã hóa cứng hành động cho hệ thống đầu vào, thành phần sẽ chứa bản đồ các sự kiện đến các hàm (tức là
std::map<std::function>
) sẽ được hệ thống đầu vào gọi. Điều này có thêm hiệu ứng của việc có thể kết hợp cùng một sự kiện với các hành động khác nhau.
Bạn có muốn giới thiệu bất kỳ phương pháp nào ở trên không hoặc bạn có đề xuất nào giúp tôi triển khai hệ thống xử lý đầu vào linh hoạt không? Ngoài ra, tôi chưa quen với đa luồng nhưng bất kỳ đề xuất nào có thể thân thiện với luồng thực hiện cũng được hoan nghênh.
Lưu ý: Một yêu cầu được thêm vào Tôi muốn triển khai thực hiện là tôi có thể chuyển cùng một đầu vào cho nhiều thực thể, ví dụ như di chuyển một thực thể máy ảnh và trình phát cùng một lúc.