**

《游戏设计模式》学习笔记

**
原作中文版传送门:《游戏设计模式》
原书作者:Bob Nystrom

阅读背景:最近担任了主程(惭愧,整个项目组就我一个人,2333),在对游戏的框架并不是那么了解的情况下,赶鸭子上架上手撸了一波代码,然后发现随着 策(lao)划(ban) 需求 的疯狂 变动,工程底层渐渐变得有些吃力,这时候有位前(ji)辈(you)建议在下拜读本书,也许会有些帮助,于是在下就屁颠屁颠地谷歌到了这本书,话不多说——不要怂就是干。

【…致谢章阅读心得省略一千字 ~ o( ̄▽ ̄)o】

Chapter 1:序章

 1.好的架构应对改动应该是轻松的。2.解耦可以让代码在改动时,波及到的范围更小。3.架构需要维护,且需要牺牲部分性能和速度。4.好的解决方案不是往代码里注水,而是蒸干代码。5.如果你想要做出让人享受的东西,那就享受做它的过程。

Chapter 2:重访设计模式

一、命令模式

     1.命令模式是一种回调的面向对象实现。2.方便撤销行为。3.可用类也可用函数实现。

二、享元模式

 1.把公共的属性抽象出一个类,需要的地方调用该公共类即可。2.对于性能的思考————需求有限。

三、观察者模式

 1.低耦合2.当观察者销毁时,要注意取消注册。

四、原型模式

 1.一个对象可以产出与自己相近的对象。2.任何对象都可以被视为原型。

五、单例模式

 1.运行时实例化,且可继承。2.实际上就是全局变量,过度使用会给内存造成很大压力。

六、状态模式

 1.避免大量的if语句造成的漏洞2.入口行为+出口行为3.分层状态机解决层次化行为的问题4.AI中常用

*Chapter 3:序列模式
一、双缓冲模式

 1.在类中保存两个缓冲实例 : 下一缓冲 和当前缓冲2.需要占用两份内存,交换场景本身也需要时间3.使用场景 —— 维护一些被增量修改的状态、防止请求状态知道内部的工作方式、不等修改状态 完成而获取状态时。

二、游戏循环

 1.将游戏的进行和玩家的输入解耦、和处理器速度解耦。2.游戏引擎一般自带这个模式。3.要用好,错误的模式比不使用更糟。4.固定帧率更省电,尽可能快地运行可以得到更好的游戏体验。

三、更新方法

 1.游戏有很多对象或系统同时运行、每个对象的行为与其他的大部分独立、对象需要跟着时间进行模拟时 使用该模式。2.对象逐帧模拟并非真的同步、可以用状态机辅助。3.无需遍历隐藏对象。

*Chapter 4:行为模式

一、字节码

 1.将行为编码为虚拟机器上的指令,赋予其数据的灵活性2.指令集 定义可执行的 底层操作。 一系列的指令被编码为字节序列。 组合指令定义复杂的高层行为。3.基于栈的虚拟机指令短小、已于胜场代码,且可生成更多的指令;基于寄存器的虚拟机指令长,但指令较少。4.消耗+解释+制造。

二、子类沙箱

 1.用一系列由基类提供的操作定义子类中的行为。2.抽基类,为子类提供所有操作,最小化子类和程序其他部分的耦合。

三、类型对象

 1.创造一个类A来允许灵活地创造新“类型”,类A的每个示例都代表了不同的对象类型2.支持单继承(简单,但查询属性更慢)、多继承(避免一些代码重复,但复杂),也可以没有继承(简单,但带来重复工作)

*Chapter 5:解耦模式

一、组件模式

 1.允许单一的尸体跨越多个领域而不会导致这些领域彼此耦合。2.可通过对象创建组件,或者外部代码提供组件。3.通信方式:修改容器对象的状态、互相引用、互相发送消息

二、事件队列

 1.解耦发出消息或事件的时间和处理它的时间。2.中心事件队列是一个全局变量,使用需要慎重考虑。3.算是观察者模式的异步实现。

三、服务器定位

 1.提供服务的全局接入点,避免使用者和实现服务的具体类耦合。2.不能定位服务时的处理:· 让使用者处理它;· 挂起游戏· 返回空服务3.打个比方:你是个地主,你有个管家,你要找人打扫、做饭、做马杀鸡什么的,直接吩咐管家就好,管家去找相应的人做这事儿,前提是这些做事儿的人都在管家那里打了招呼——老王,我这儿有服务,多照顾下小弟呗……

*Chapter 6:优化模式

一、数据局部性

     1.合理组织数据,充分使用CPU的缓存来加速内存读取。2.目标是组织数据结构,让要处理的数据紧紧相邻。3.使用数据局部性的第一准则——遇到性能问题时使用。4.可以选择性地在局部几个核心数据结构上使用这个模式。

二、脏标识模式

     1.将工作延期至需要其结果时才去执行,避免不必要的工作。2.延期太久是有代价的,每次状态改变都得保证设置标识,需要将之前的推导数据保存在内存中。3.当结果请求时清空脏标识、在检查点处清除、在后台处理清除;4.脏粒度细则开销更大。

三、对象池模式

     1.对象可重用。2.重用对象不会自动清除,未使用的对象会保留在内存中。

四、空间分区

     1.将对象根据它们的位置存储在数据结构中,将来高效定位对象。2.具体可以了解  网格结构、四叉树 、 BSP

最后小结一下 :
嗯哼,感谢推荐给我这本书的哥们儿,感谢党,感谢人民,感谢CCTV,这本书让我对设计模式有了更全面的了解,打油诗一首,聊表心得:
《设计颂》
基类方法三千遍,不如一日重访盘。
缓冲游戏更新嵌,字节沙箱对象圆。
解耦组队服务练,数据空间脏池还。
且码且用且为猿,末将楼阁离地面。

《游戏设计模式》学习笔记相关推荐

  1. 第二行代码学习笔记——第六章:数据储存全方案——详解持久化技术

    本章要点 任何一个应用程序,总是不停的和数据打交道. 瞬时数据:指储存在内存当中,有可能因为程序关闭或其他原因导致内存被回收而丢失的数据. 数据持久化技术,为了解决关键性数据的丢失. 6.1 持久化技 ...

  2. 第一行代码学习笔记第二章——探究活动

    知识点目录 2.1 活动是什么 2.2 活动的基本用法 2.2.1 手动创建活动 2.2.2 创建和加载布局 2.2.3 在AndroidManifest文件中注册 2.2.4 在活动中使用Toast ...

  3. 第一行代码学习笔记第八章——运用手机多媒体

    知识点目录 8.1 将程序运行到手机上 8.2 使用通知 * 8.2.1 通知的基本使用 * 8.2.2 通知的进阶技巧 * 8.2.3 通知的高级功能 8.3 调用摄像头和相册 * 8.3.1 调用 ...

  4. 第一行代码学习笔记第六章——详解持久化技术

    知识点目录 6.1 持久化技术简介 6.2 文件存储 * 6.2.1 将数据存储到文件中 * 6.2.2 从文件中读取数据 6.3 SharedPreferences存储 * 6.3.1 将数据存储到 ...

  5. 第一行代码学习笔记第三章——UI开发的点点滴滴

    知识点目录 3.1 如何编写程序界面 3.2 常用控件的使用方法 * 3.2.1 TextView * 3.2.2 Button * 3.2.3 EditText * 3.2.4 ImageView ...

  6. 第一行代码学习笔记第十章——探究服务

    知识点目录 10.1 服务是什么 10.2 Android多线程编程 * 10.2.1 线程的基本用法 * 10.2.2 在子线程中更新UI * 10.2.3 解析异步消息处理机制 * 10.2.4 ...

  7. 第一行代码学习笔记第七章——探究内容提供器

    知识点目录 7.1 内容提供器简介 7.2 运行权限 * 7.2.1 Android权限机制详解 * 7.2.2 在程序运行时申请权限 7.3 访问其他程序中的数据 * 7.3.1 ContentRe ...

  8. 第一行代码学习笔记第五章——详解广播机制

    知识点目录 5.1 广播机制 5.2 接收系统广播 * 5.2.1 动态注册监听网络变化 * 5.2.2 静态注册实现开机广播 5.3 发送自定义广播 * 5.3.1 发送标准广播 * 5.3.2 发 ...

  9. 第一行代码学习笔记第九章——使用网络技术

    知识点目录 9.1 WebView的用法 9.2 使用HTTP协议访问网络 * 9.2.1 使用HttpURLConnection * 9.2.2 使用OkHttp 9.3 解析XML格式数据 * 9 ...

  10. 安卓教程----第一行代码学习笔记

    安卓概述 系统架构 Linux内核层,还包括各种底层驱动,如相机驱动.电源驱动等 系统运行库层,包含一些c/c++的库,如浏览器内核webkit.SQLlite.3D绘图openGL.用于java运行 ...

最新文章

  1. 一个虚拟机网络的XML描述
  2. 为WordPress添加favicon图标
  3. OpenCV学习之视频读取与帧的提取、显示及保存
  4. Javascript网页滚动方法
  5. WD 蓝盘、绿盘、黑盘、红盘的区别
  6. python使用sphinx自动生成文档
  7. 淘宝开源Key/Value结构数据存储系统Tair技术剖析
  8. unigui发展路线图
  9. linux重定向命令语法,linux重定向命令应用及语法
  10. ApacheCN Python 译文集 20211108 更新
  11. FFmpeg 内容介绍 音视频解码和播放
  12. English Study
  13. OBS,vMIX,Wirecast,TCliveSP直播串流导播软件区别及比较
  14. 投之家与妙优车达成战略合作,加强推进优质资产端建设
  15. 拼多多的“最初一公里”战事
  16. proe常用c语言语句,Proe如何使用if条件语句?
  17. 那些年啊,那些事——一个程序员的奋斗史 ——80
  18. 迅为-IMX6UL开发板丨双网口丨双CAN总线丨4路USB HOST丨2路串口、6路插座引出,共8路串口丨1路RGB信号丨2路LVDS信号
  19. UBuntu18.04 Qt之双HDMI接2个4K屏并分别设置分辨率、主屏、副屏
  20. 解析单存储库:定义、优势与挑战

热门文章

  1. 利用非qq号码的QQ邮箱来获取qq号
  2. python 列表 元祖_Python_列表与元祖
  3. i12蓝牙耳机使用说明书图片_蓝牙耳机使用常见问题
  4. 重装、删除、卸载ArcGIS的注意的事项
  5. 萌妹子Python入门指北(二)
  6. XiaoHu日志 11/22~12/3
  7. 贪心——Greedy
  8. Oracle 12c 读书笔记——筑梦之路
  9. arrive at/agree with/account for等动词词组
  10. 卷积神经网络调参技巧(2)--过拟合(Dropout)