我已经使用SDL和PollEvent方法工作了一段时间,它总是很适合我。但是,在播放了一些基于Flash的引擎之后,我正在尝试创建一个类似于我们在Flash中的事件监听器系统。我在考虑这样的事情:(伪代码)
GameObject object
object.addEventListener(MOUSE_CLICK, myClickCallback)
但是,我不确定如何以有效的方式完成这项工作。我可以在每个帧上运行PollEvent然后遍历我场景中的整个GameObjects列表:如果在PollEvent上收到的事件是X,则调用X的所有侦听器。但是,这看起来非常慢。有更好的方法吗?有没有人做过类似的事情?
答案 0 :(得分:0)
您可以为每个事件存储一个对象列表。所以当调用addEventListener时,你真正在做的是listener_list[MOUSE_CLICK].add(object)
然后你只需要调用每个对象的myClickCallback函数。
答案 1 :(得分:0)
SDL2有两个功能,可以帮助您实现您想要的功能,而无需自己保留听众列表(无论如何Flash都是幕后操作)。
但这些并不是“添加侦听器”机制的直接替换。请务必阅读文档中的警告!如果你的应用程序是多线程的(在Android上它总是在你喜欢与否),还有其他注意事项需要处理。