Системы событий удивительны, они делают чрезвычайно громоздкий код ручным и действительно позволяют динамически создавать игры с помощью простого взаимодействия объектов и игрового цикла. Я испытываю трудности с эффективностью моей текущей реализации. В настоящее время моя небольшая оптимизация разделения списков объектов на события, на которые они отвечают, сделала чудеса, но я должен сделать больше.
В настоящее время у меня есть два метода:
Проще всего : все объекты добавляются в вектор при отправке события, все объекты отправляются событием через метод handle_event ()
Более сложный: у меня есть карта со строкой в качестве ключа и int в качестве значения. Когда тип события добавляется, он добавляется к этой карте, при этом int просто увеличивается (должен быть лучший способ),
чтобы вектор векторов объектов затем возвращал новый вектор для обработки этого типа события.
Когда событие вызывается, оно просто вызывает соответствующее int в сопоставлении eventTypes с типом внутри вектора векторов объектов и отправляет это событие каждому объекту, обрабатывающему этот тип события.
Этот первый метод довольно медленный (очевидно) для многих объектов, но довольно быстрый для очень немногих объектов. Принимая во внимание, что второй метод довольно быстр с большими объектами, которые хотели бы обрабатывать различные типы событий, но медленнее, чем первый метод для объекта с объектами, обрабатывающими события того же типа.
Есть ли более быстрый (мудрый способ) способ? Есть ли более быстрый способ найти int из строкового типа? (Изначально у меня был enum, но он не допускал пользовательских типов, которые необходимы из-за желаемого уровня динамизма.)