SDL 2中类似Flash的事件绑定

时间:2013-11-22 19:50:30

标签: sdl sdl-2

我已经使用SDL和PollEvent方法工作了一段时间,它总是很适合我。但是,在播放了一些基于Flash的引擎之后,我正在尝试创建一个类似于我们在Flash中的事件监听器系统。我在考虑这样的事情:(伪代码)

GameObject object
object.addEventListener(MOUSE_CLICK, myClickCallback)

但是,我不确定如何以有效的方式完成这项工作。我可以在每个帧上运行PollEvent然后遍历我场景中的整个GameObjects列表:如果在PollEvent上收到的事件是X,则调用X的所有侦听器。但是,这看起来非常慢。有更好的方法吗?有没有人做过类似的事情?

2 个答案:

答案 0 :(得分:0)

您可以为每个事件存储一个对象列表。所以当调用addEventListener时,你真正在做的是listener_list[MOUSE_CLICK].add(object)

然后你只需要调用每个对象的myClickCallback函数。

答案 1 :(得分:0)

SDL2有两个功能,可以帮助您实现您想要的功能,而无需自己保留听众列表(无论如何Flash都是幕后操作)。

但这些并不是“添加侦听器”机制的直接替换。请务必阅读文档中的警告!如果你的应用程序是多线程的(在Android上它总是在你喜欢与否),还有其他注意事项需要处理。