我正在尝试为我的小型 RPG 项目使用某种观察者模式创建一个中央事件调度系统,我需要有关如何最好地表示事件数据的建议。
我将有一个 EventManager,它为静态枚举中定义的不同事件类型注册侦听器类,例如 Event_Input_KeyPressed 或 Event_Game_ActorMoved。它将事件存储在一个队列中并将它们分派给相应的侦听器,每个侦听器都有一个方法 handleEvent(Event e) 或其他东西。
每个事件都将是 Event 类型的对象,其中包含诸如其事件类型之类的数据。
我的问题是,由于事件数据的性质在事件类型之间存在很大差异,应该如何表示这些数据?我还不确定我将来要创建什么类型的事件,所以我希望它尽可能灵活。例如,如果某些条件为真,一个事件可能会触发其他事件(即当玩家按下操作键时,如果玩家在某个位置并且有钥匙,则门会打开)。XML 或脚本是一个不错的选择吗?我能想到的另一种方法是为每个常规事件创建一个自定义类,例如 ActorEvent 或 MenuEvent,但这似乎效率低下且不灵活。此外,由于某些对象(例如 Character)只需要知道非常具体的事件,例如按下“w”键时,我认为当其他键(例如“h”)时不需要通知它们 被按下。创建特定的事件类型是否可行或有更好的方法?IE。Event_Input_KeyPressed_W
谢谢