Game Programming Patterns 阅读笔记 2
回顾 Command 命令模式
什么是命令模式
- GoF对命令模式的一种解释:
命令模式是一种回调的面向对象实现
- 感觉这个解释十分到位,命令模式就是面向对象版本的:C里的函数指针,Javascript的闭包,Python里作为一等公民的函数,Gdscript里的Callable
三个例子
-
作者以输入绑定为例,使用这个模式之前,一个按键写死了对应一个动作(比如按下'W'就是跳跃,按下'A'就是攻击),而命令模式为其添加了一层间接寻址
-
还有增强操控角色灵活度的例子,通过给命令传入角色的引用可以方便的在运行时切换可操作的角色。这对于做多人对战、附身、玩家角色自动演示,角色AI很有帮助
-
方便的实现撤销(Undo)、重放(Replay)操作,在策略游戏/SRPG里很常用。就是记住命令执行之前的状态,以期未来可以恢复这种状态来实现撤销。
- 另一种方法是持久化旧的状态,新的状态持有旧状态对象的引用,一旦想要撤销就切换到旧状态对象
In some ways, the Command pattern is a way of emulating closures in languages that don’t have them.
命令模式只是在模拟函数式语言的闭包
另见
- 在基类里面实现一些高层方法会有帮助
- 责任链模式(分配命令)
- 无状态的命令可以用 ”享元模式 (Flyweight)“ 节约内存,共用实例