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

**

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

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

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值