http://www.cnblogs.com/yaoyansi/articles/1837679.html
http://www.gamedev.net/topic/605016-general-design-of-game-event-system/
游戏事件系统的一般设计方法
问:
我在寻找一种游戏简单的事件系统设计方法指导。我已经利用了观察者/监听者模式来对一个事件队列产生处理。
我的问题是,为了在完整游戏循环中通过顺序的处理产生事件的几个阶段,用户输入,物理事件/运动,游戏状态新号等,
我认为有几个选项,
1) 容忍消息的延迟,将新旧消息排成队列,只进行一次消息处理,
2) 事件管理器在一次循环中进行多次处理tick
3) 可以将新发生的事件附加在事件队列中
4) 选择性的触发事件
5) 混合
6) 其他
我总结出到一种通用的并且可以很容易与远程玩家兼容的一种方式。
答
标准的做法是将事件分为两类: 事件通知和状态改变,
事件通告对于事件要求不严格,例如,“喂,xyz 发生了,当你有能力去做的时候去应答”这对,AI,物理,
其他形式的模拟很管用,因为它们没必要每个事件都运行。通常你使用事件队列。
对于状态改变而言,你必须即可进行处理,因为它直接影响这游戏模拟的状态,这包含用户输入,应答AI即事件通告,等等。
任何在下一帧可以被观察到的都应视作状态改变。通常状态改变是直接相应的。call back 函数为这一类。
这将为多线程处理带来的优点。例如,事件通知将被独立在每个线程中,然后被汇总到最后的分发。
状态改变通常需要额外的处理,如果你已经对其进行分开处理,那么将会简单许多。