edit date: 2019-11-26 16:59:39

0x00 命令模式

新坑《游戏编程模式》(作者 Robert Nystrom)。

在 Unity 下,用 C# 做了简单的实现,传送门:

链接:https://pan.baidu.com/s/1DozDp_yTc3Tu8icPICAyNw
提取码:qotg

0x01 命令模式

“将一个请求封装成一个对象,从而使我们可以使用不同的请求、队列或日志将客户端参数化,同时支持请求操作的撤销与恢复。”

简单地说,在这种模式下,命令就是一个对象化的方法调用。

0x02

命令模式的好处:对命令的发送者和接收者完全的解耦(模式动机)。

在进行包含“回放”功能的游戏中,使用命令模式可以更简单的通过历史指令,达到回放的目的。另外在制作如工具时,命令模式可以简单的实现撤销功能。

玩了《武士刀·零(Katana Zero)》,游戏在每一个场景结束,都会有一个“录像带”的功能,即对成功通关的操作进行回放,而且会将“子弹时间”取消掉,这种功能的实现,就可以使用命令模式。很多平台 2d 游戏都会在一个场景通过后用这种方式来回放,《超级食肉男孩(super meat boy)》会在过关后将每一次尝试的结果同时回放,还是很有趣的。

0x03

为了简要地理解命令模式,书中从配置输入进行讲解,游戏简单讲就是一个处理玩家输入的系统,必定有一块代码是用来读取玩家原始输入的,按钮点击,键盘事件,鼠标点击等等。

上面的网盘中的例子中就对玩家输入进行了一层间接调用的封装,所有的输入会被读取并创建对应的命令对象,并在指令队列中管理。网上找了一个类图看看:

Command 在例子中是一个抽象类,需要后面特定的具体命令(Concrete Command)继承,并实现 excute() 与 Undo() 两个主要方法,实现调用和撤销。命令的接收者(Receiver)保存在类中,需要构造时传入特定的接收者。这样的好处是,我们的命令对象不仅可以响应玩家的输入,而是可以根据传入的对象,控制任意一个需要被控制的对象,AI 也可以简单地提供命令对象来执行。

命令模式需要考虑的一点是,所有可执行的命令都是对象,因此如何优化这些对象的内存,进行垃圾收集(比如多个相同的无状态的纯行为命令会浪费内存)。

而在 Lua 中,函数第一类值,上面的命令模式可以直接使用闭包来实现,换言之,在某些方面,命令模式对于没有闭包(或者不好用的闭包实现)的语言来说是模拟闭包的一种方式。

0xff

说点什么呢,就天真的加油呗。

游戏编程模式 - 命令模式相关推荐

  1. 游戏设计模式:命令模式(以Unity开发坦克大战为例)

    命令模式 命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式.请求以命令的形式包裹在对象中,并传给调用对象.调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应 ...

  2. 设计模式 — 行为型模式 — 命令模式

    目录 文章目录 目录 命令模式 应用场景 代码示例 命令模式 命令模式的目的是解耦调用操作的对象(调用者)和提供实现的对象(接收者). 命令模式的思路是在调用者和接收者之间插入一个命令类(Comman ...

  3. 备忘录模式 命令模式_备忘录设计模式示例

    备忘录模式 命令模式 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此重 ...

  4. 设计模式-行为型模式-命令模式

    设计模式-行为型模式-命令模式 基础 以一个MIS系统为栗子 MIS 管理信息系统(Management Information System,MIS)是一个以人为主导的,利用计算机硬件.软件和网络设 ...

  5. 《设计模式详解》行为型模式 - 命令模式

    命令模式 6.3 命令模式 6.3.1 概述 6.3.2 结构 6.3.3 案例实现 6.3.4 优缺点 6.3.5 使用场景 6.3.6 JDK 源码 - Runnable 完整的笔记目录:< ...

  6. 16、设计模式-行为型模式-命令模式

    命令模式(请求发送者与接收者解耦) 在软件开发中,我们经常需要向某些对象发送请求(调用其中的某个或某些方法),但是并 不知道请求的接收者是谁,也不知道被请求的操作是哪个,此时,我们特别希望能够以一种 ...

  7. 行为模式(模板模式命令模式备忘录模式)

    目录 模板方法模式(Template) 介绍 实现 命令模式(Command) 介绍 实现 备忘录模式(Memento) 介绍 实现 模板方法模式(Template) 一个抽象类公开定义了执行它的方法 ...

  8. Java设计模式(代理模式-模板方法模式-命令模式)

    Java设计模式Ⅴ 1.代理模式 1.1 代理模式概述 1.2 静态代理 1.2.1 静态代理概述 1.2.2 代码理解 1.3 动态代理之JDK代理 1.3.1 动态代理之JDK代理概述 1.3.2 ...

  9. 『设计模式』再谈麦当劳的点单模式--命令模式(Command)

    23种设计模式+额外常用设计模式汇总 (持续更新) 麦当劳,我三期设计模式拿你举例子了,私信联系我打钱!!! 概述 命令模式又称为行动(Action) 模式或交易(Transaction) 模式. 命 ...

最新文章

  1. J2EE项目移植问题二
  2. 小端字节序与大端字节序
  3. 机器学习-cs229-线性回归-梯度下降法
  4. 如何用TensorFlow实现人工智能?
  5. php 日期转毫秒_【小技巧】 各种日期操作方法汇总
  6. laravel 淘宝 NPM 镜像
  7. Spring-Jpa : @MappedSuperclass的作用
  8. python的sorted排序具体解释
  9. Java LocalTime
  10. 快速创建简单的WCF跨平台服务
  11. python 桌面数据库_python数据库操作笔记
  12. layui treeTable
  13. hashcat的使用方法
  14. a20 linux qt,全志A83T开发板,超树莓派/A20/A31S/banana pi M3/八核/Android5
  15. android 读写文件 简书,Android 读取asset文件
  16. 计算机常用的四种加密方法,电脑常见的几种加密方法
  17. windows下清除文件批处理命令
  18. 名帖370 赵孟頫《真草千字文》
  19. linux系统打开远程端口,linux下3种检测远程端口是否打开的方法
  20. 京东商城之手机购买推荐

热门文章

  1. 词频分析(Python脚本)
  2. 如何使用传统图像处理方法进行大米的计数和长轴方向标记
  3. 一个c语言源文件可以包含两个以上main,二级C语言习题汇总及标准答案.doc
  4. 苏嵌//张朋//2018.07.23
  5. Poseidon(海神号)
  6. 时隔14年《头文字D》演员重聚,周杰伦余文乐刘畊宏昆凌同框,唯独少了陈冠希
  7. 2017暑期实习招聘-产品经理-微软WDGAE(2)-第3轮面试
  8. 企业数据治理之主数据管理
  9. C语言写出猜数字游戏的代码
  10. PPT如何导出高清图片