**
**
原作中文版传送门:《游戏设计模式》
原书作者: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,这本书让我对设计模式有了更全面的了解,打油诗一首,聊表心得:
《设计颂》
基类方法三千遍,不如一日重访盘。
缓冲游戏更新嵌,字节沙箱对象圆。
解耦组队服务练,数据空间脏池还。
且码且用且为猿,末将楼阁离地面。