我想我已经决定我真的很喜欢事件处理程序。我可能会因分析瘫痪而受苦,但是我担心会使我的设计变得笨拙,或者在我的设计决策中遇到其他无法预料的后果。
我的游戏引擎目前使用平移式高架摄像机进行基本的基于Sprite的渲染。我的设计看起来像这样:
场景处理程序
包含实现SceneListener接口的类的列表(当前仅限于Sprites)。每个刻度调用一次render(),并发送onCameraUpdate(); 消息发送给SceneListeners。
InputHandler
每个刻度轮询一次输入,然后将简单的“ onKeyPressed”消息发送给InputListeners。我有一个Camera InputListener,它包含一个SceneHandler实例并触发updateCamera();。基于输入的事件。
AgentHandler
每个刻度一次在任何代理(AI)上调用默认操作,并将检查堆栈中是否有已注册的任何新事件,并根据需要将它们分配给特定的代理。
因此,我有一些基本的Sprite对象,它们可以在场景中移动并使用基本的转向行为进行移动。我已经开始进行碰撞检测了,这是我不确定我的设计方向是否正确的地方。拥有许多小型事件处理程序是一种好习惯吗?我想我必须要实现某种CollisionHandler。
我会更好地使用一个更统一的EntityHandler来处理一个类中的AI,碰撞更新和其他实体交互吗?还是只是实现许多不同的事件处理子系统就可以了,它们会根据事件类型将消息传递给彼此?我是否应该编写一个仅负责协调所有这些子事件处理程序的EntityHandler?
我意识到在某些情况下,例如我的InputHandler和SceneHandler,它们是非常特定的事件类型。我的游戏代码很大一部分都不关心输入,而很大一部分则不关心纯粹在场景渲染中发生的更新。因此,我感到孤立那些系统是合理的。但是,我要问的是专门针对游戏逻辑类型事件的问题。