《游戏设计模式》学习笔记
**
《游戏设计模式》学习笔记
**
原作中文版传送门:《游戏设计模式》
原书作者: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,这本书让我对设计模式有了更全面的了解,打油诗一首,聊表心得:
《设计颂》
基类方法三千遍,不如一日重访盘。
缓冲游戏更新嵌,字节沙箱对象圆。
解耦组队服务练,数据空间脏池还。
且码且用且为猿,末将楼阁离地面。
《游戏设计模式》学习笔记相关推荐
- 第二行代码学习笔记——第六章:数据储存全方案——详解持久化技术
本章要点 任何一个应用程序,总是不停的和数据打交道. 瞬时数据:指储存在内存当中,有可能因为程序关闭或其他原因导致内存被回收而丢失的数据. 数据持久化技术,为了解决关键性数据的丢失. 6.1 持久化技 ...
- 第一行代码学习笔记第二章——探究活动
知识点目录 2.1 活动是什么 2.2 活动的基本用法 2.2.1 手动创建活动 2.2.2 创建和加载布局 2.2.3 在AndroidManifest文件中注册 2.2.4 在活动中使用Toast ...
- 第一行代码学习笔记第八章——运用手机多媒体
知识点目录 8.1 将程序运行到手机上 8.2 使用通知 * 8.2.1 通知的基本使用 * 8.2.2 通知的进阶技巧 * 8.2.3 通知的高级功能 8.3 调用摄像头和相册 * 8.3.1 调用 ...
- 第一行代码学习笔记第六章——详解持久化技术
知识点目录 6.1 持久化技术简介 6.2 文件存储 * 6.2.1 将数据存储到文件中 * 6.2.2 从文件中读取数据 6.3 SharedPreferences存储 * 6.3.1 将数据存储到 ...
- 第一行代码学习笔记第三章——UI开发的点点滴滴
知识点目录 3.1 如何编写程序界面 3.2 常用控件的使用方法 * 3.2.1 TextView * 3.2.2 Button * 3.2.3 EditText * 3.2.4 ImageView ...
- 第一行代码学习笔记第十章——探究服务
知识点目录 10.1 服务是什么 10.2 Android多线程编程 * 10.2.1 线程的基本用法 * 10.2.2 在子线程中更新UI * 10.2.3 解析异步消息处理机制 * 10.2.4 ...
- 第一行代码学习笔记第七章——探究内容提供器
知识点目录 7.1 内容提供器简介 7.2 运行权限 * 7.2.1 Android权限机制详解 * 7.2.2 在程序运行时申请权限 7.3 访问其他程序中的数据 * 7.3.1 ContentRe ...
- 第一行代码学习笔记第五章——详解广播机制
知识点目录 5.1 广播机制 5.2 接收系统广播 * 5.2.1 动态注册监听网络变化 * 5.2.2 静态注册实现开机广播 5.3 发送自定义广播 * 5.3.1 发送标准广播 * 5.3.2 发 ...
- 第一行代码学习笔记第九章——使用网络技术
知识点目录 9.1 WebView的用法 9.2 使用HTTP协议访问网络 * 9.2.1 使用HttpURLConnection * 9.2.2 使用OkHttp 9.3 解析XML格式数据 * 9 ...
- 安卓教程----第一行代码学习笔记
安卓概述 系统架构 Linux内核层,还包括各种底层驱动,如相机驱动.电源驱动等 系统运行库层,包含一些c/c++的库,如浏览器内核webkit.SQLlite.3D绘图openGL.用于java运行 ...
最新文章
- 一个虚拟机网络的XML描述
- 为WordPress添加favicon图标
- OpenCV学习之视频读取与帧的提取、显示及保存
- Javascript网页滚动方法
- WD 蓝盘、绿盘、黑盘、红盘的区别
- python使用sphinx自动生成文档
- 淘宝开源Key/Value结构数据存储系统Tair技术剖析
- unigui发展路线图
- linux重定向命令语法,linux重定向命令应用及语法
- ApacheCN Python 译文集 20211108 更新
- FFmpeg 内容介绍 音视频解码和播放
- English Study
- OBS,vMIX,Wirecast,TCliveSP直播串流导播软件区别及比较
- 投之家与妙优车达成战略合作,加强推进优质资产端建设
- 拼多多的“最初一公里”战事
- proe常用c语言语句,Proe如何使用if条件语句?
- 那些年啊,那些事——一个程序员的奋斗史 ——80
- 迅为-IMX6UL开发板丨双网口丨双CAN总线丨4路USB HOST丨2路串口、6路插座引出,共8路串口丨1路RGB信号丨2路LVDS信号
- UBuntu18.04 Qt之双HDMI接2个4K屏并分别设置分辨率、主屏、副屏
- 解析单存储库:定义、优势与挑战