《游戏编程模式》笔记——命令模式
命令模式的定义
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
命令模式是一种回调的面向对象实现
命令是具现化的方法调用。
说人话就是,命令模式把原本的函数调用封装成了类,执行命令的时候调用这个类的对象去执行想要的操作。因为类的可扩展性高,可以通过队列和类的扩展来支持撤销和重做的操作。
撤销和重做
撤销和重做是命令模式最广为人知的使用情况。
如果一个命令对象可以做一件事,那么它也可以撤销这件事。
例如战棋游戏里游戏里的撤销移动,建筑游戏里撤销建筑的摆放。
实现撤销和重做,需要记录执行命令的对象、命令执行前对象的状态和命令执行后的状态,在撤销时将状态还原到执行前,重做时还原到执行后。
并且需要一个列表来记录所有执行的命令,且有一个索引指向当前的命令,撤销时索引后撤,重做时索引推进。
有新的命令加入时,需要移除所有已经撤销的操作。

AI
命令模式也可以作用在敌人身上,使用状态机或行为树来调用不同的命令。
也可以为玩家的角色加上AI,这在游戏需要自动演示的时候很有用。

参考:
《游戏编程模式》

