事件系统令人惊叹,它们使代码变得极其笨拙,并且确实允许通过对象之间的轻松通信和游戏循环来动态创建游戏。我目前的执行效率很难。目前,我对将对象列表分离为它们响应的事件进行了一些细微的优化,这确实产生了奇迹,但是我应该做的还很多。
目前,我有两种方法:
最简单:发送事件时,所有对象都添加到向量中。所有对象都通过其handle_event()方法发送事件
更复杂:我有一个以字符串为键的映射,以int为值的映射。添加事件类型后,会将其添加到此地图,只需将int简单地增加(必须有更好的方法)
,然后将对象向量的向量推回新的向量以处理该事件类型。
调用事件时,它只需将eventTypes映射中的相应int映射到对象向量的vector内的类型,然后将该事件发送给处理该事件类型的每个对象。
对于许多对象,这第一种方法相当慢(很明显),但是对于很少的对象来说却相当快。而对于要处理不同类型事件的大型对象,第二种方法相当快,但对于处理相同类型事件的对象,每个对象的第二种方法却较慢。
有没有更快的方法?有没有一种更快的方法来从字符串类型查找int?(起初,我有一个枚举,但是它不允许使用自定义类型,这是必需的,因为需要具有一定的动态性。)