我正在尝试为我正在制作的游戏创建一种事件系统(缺乏更好的定义)。我需要做的是,拥有一组(硬编码的) 'core‘函数,我可以以任意的方式将它们链接在一起,并将其定义为“事件”,然后我可以使用一些任意参数来执行这些函数。
如果这些事件是硬编码的,f.ex,这些“事件”就会相对简单。
hardcodedEvent(int this, int that){
coreFunc1(this);
coreFunc2(that);
coreFunc3(coreFunc4(this + that));
//etc...
}但问题是,它们需要是动态的和模块化的,这样在理论上,您就能够以类似于流程图/图表的方式来构造和表示这些事件(例如: 3d软件的流程图编辑器)。
最后,我需要这些事件是可序列化的,这样我就可以将它们作为文件保存并加载到数据库中。
我看过回调、命令、观察者和状态机模式,但我不知道哪种模式最适合这种情况,而且我以前也没有对其中任何一种模式做过太多的工作。
发布于 2016-03-06 17:14:33
对我来说,您确切地想到了对您的问题有用的设计模式。这当然只是把它们结合在一起的问题。
如果我理解得很好的话,你是在玩一些游戏(混乱,信息交流,.)和一些保存/加载/日志逻辑(文件保存,数据库,.)在某个时候。
state :对于带有模块化状态的状态机行为,根据您的“流程图”描述,它似乎适合于游戏,但对于事件系统则不太适合。
观察者:对于发布/订阅逻辑(信息共享,.)
回调:对于松散耦合的日志系统(同步东西,日志到文件)
命令:对于将请求封装为对象,这里可能不太有用
我还想在清单上加上另外两条:
Decorator:因为您的游戏组件,事件似乎以模块化的方式是“可链接的”(即:将核心函数链接起来,使其更进化)
Builder:对于您想要从文件中加载游戏的部分,它可以爬行您的文件并在保存状态下重新创建游戏,封装了沉重的加载逻辑.
希望能帮上忙。
https://stackoverflow.com/questions/35821376
复制相似问题