我试图为我正在制作的游戏创建一种事件系统(缺乏更好的定义)。我需要做的是拥有一套(硬编码的)核心'函数,我可以以任意方式链接在一起并定义为"事件"然后我可以使用一些任意参数执行。
这些"事件"如果它们是硬编码的话会比较简单,f.ex。
hardcodedEvent(int this, int that){
coreFunc1(this);
coreFunc2(that);
coreFunc3(coreFunc4(this + that));
//etc...
}
但重点是它们需要是动态的和模块化的,这样你才能在理论上以流程图/图表的方式构造和表示这些事件(例如: 来自3d软件的flow-chart编辑器
最终,我需要将这些事件序列化,以便我可以将它们保存并加载为文件或加载到数据库中。
我看过Callback,Command,Observer和State机器模式,但我不知道哪一个最适合这样的东西,而且我工作得很多以前任何一个。
答案 0 :(得分:0)
对我而言,您必须考虑到对您的问题有用的设计模式。这当然只是将它们结合起来的问题。
如果我理解得很好,你会尝试用某些事件(消息,信息交换......)和某些保存/加载/日志逻辑(文件保存,数据库......)进行游戏
状态:对于具有模块化状态的状态机行为,根据您的“流程图”描述似乎适合游戏,但对于事件系统则更少
观察者:对于发布/订阅逻辑(信息共享,...)
回调:对于松散耦合的日志记录系统(同步事物,登录到文件)
命令:对于将请求封装为对象,可能在这里不太有用
我会在列表中添加另外两个:
装饰者:因为您的游戏组件,事件似乎是以模块化的方式“链接”(即:链接核心功能以制作更多进化的组件)
构建器:对于您要从文件加载游戏的部分 - 它可以抓取您的文件并在已保存的状态下重新创建游戏,封装重载逻辑。
希望它有所帮助。