我一直在研究Java游戏引擎的基础知识,并且已经准备好添加到Event Manager系统中。
从理论上讲,我知道事件管理器应该做什么:允许对象为某些事件“注册”,并且每当事件管理器收到事件通知时,就将事件广播给“注册”的侦听器。我感到很困惑的是如何开始实施它。
我无法从网上找到任何有关从头开始实施事件系统的信息,因此我正在寻找有关这种情况下最佳实践的信息-我应该和不应该做什么做应该做的事情。
例如,我的每个游戏对象是否真的都必须有一个EventManager
字段?由于我所有的游戏对象都继承自一个抽象的父类,因此我认为我应该能够使用静态引用,以便在所有游戏对象之间共享一个事件管理器实例。我已经使用Applet进行了类似的操作,以用于渲染每个对象。
我想我必须为每个可能的订阅事件维护某种类型的集合-根据需要在列表中添加和删除游戏对象。我认为应该使需要广播的事件队列成为可能,在这种情况下,我可以简单地在主游戏循环中添加“ EventManager.Update()”,并让该Update()
方法广播最后发生的事件每帧。最后,每个对象都有一个HandleEvent(Event e)
方法,然后可以对其进行适当地解析和响应。
这听起来像是实现此类系统的正确方向,还是我偏离了正常轨道和/或缺少了一些显而易见的东西?