Hệ thống sự kiện thật tuyệt vời, chúng tạo ra mã cực kỳ khó sử dụng và thực sự cho phép tạo ra các trò chơi năng động thông qua việc giao tiếp dễ dàng với các đối tượng và vòng lặp trò chơi. Tôi đang có một thời gian khó khăn với hiệu quả của việc thực hiện hiện tại của tôi. Hiện tại tôi tối ưu hóa một chút về việc tách danh sách các đối tượng thành các sự kiện mà họ phản ứng đã làm nên điều kỳ diệu, nhưng tôi cần phải làm nhiều hơn nữa.
Hiện tại tôi có hai phương pháp:
Đơn giản nhất: tất cả các đối tượng được thêm vào một vectơ khi một sự kiện được gửi, tất cả các đối tượng được gửi sự kiện thông qua phương thức handle_event ()
Phức tạp hơn: Tôi có một bản đồ với chuỗi là khóa và int là giá trị của nó. Khi một loại sự kiện được thêm vào, nó được thêm vào bản đồ này, với int đơn giản được tăng lên (phải có cách tốt hơn)
vectơ vectơ của các đối tượng sau đó đẩy lùi một vectơ mới để xử lý loại sự kiện đó.
Khi một sự kiện được gọi, nó chỉ đơn giản gọi int tương ứng trong ánh xạ eventTypes tới kiểu bên trong vectơ của vectơ của các đối tượng và gửi sự kiện đó đến từng đối tượng xử lý loại sự kiện đó.
Các phương thức đầu tiên này khá chậm (rõ ràng) đối với nhiều đối tượng, nhưng khá nhanh đối với rất ít đối tượng. Trong khi đó phương thức thứ hai khá nhanh với các đối tượng lớn muốn xử lý các loại sự kiện khác nhau, nhưng chậm hơn phương thức đầu tiên trên mỗi đối tượng với các đối tượng xử lý cùng loại sự kiện.
Có cách nào nhanh hơn (chạy theo thời gian) không? Có cách nào nhanh hơn để tra cứu một int từ kiểu chuỗi không? (Ban đầu tôi có một enum, nhưng nó không cho phép các loại tùy chỉnh, điều này cần thiết vì mức độ năng động mong muốn.)