读《游戏编程模式》

 美国,Robert Nystrom 著

第1篇,概述架构、性能和游戏的关系

第2篇,回顾了 GoF 经典的 6 种模式

第3 ~ 6 篇,序列型模式,行为型模式,解耦型模式和优化型模式

图形、人工智能、动画、视觉效果

CPU 的每一个周期。

简单性:9页。

新手程序员:为每个需要记住的用例构建大量的条件逻辑。

最省脑力的方法是只编写一次测试用例。

命令模式

命令就是一个对象化(实例化)的方法调用。

封装在一个对象中的一个方法调用。

示例:

配置输入:(用户原始输入:按键,鼠标或其他)

关于角色:

    不同角色使用不同的 AI 模块。

撤消和重做

    每种命令都有撤消命令。

第3章,享元模式

森林之树:GPU 以每帧 1/60 秒的速度在渲染着的数以百万计的多边形。使用共享的模型数据来渲染每个实例。Direct3D 和 OpenGL 都能够实现实例绘制。

    第一组是要被渲染多次的通用数据——比如上面例子中的网格和纹理。

    第二组是实例列表以及它们每次被绘制时用来在第一组数据的基础上产生差异化的那些参数,进行一次绘制调用,即可将整片森林绘制出来。

 享元模式(Flyweight):当有太多对象并考虑对其进行轻量化时采用。26页

扎根之地:每一种地形都有一些影响着游戏玩法的属性,移动开销,是否能行船,地形渲染纹理。

通过指针来切换共享的对象。

第4章,观察者模式

在对象间定义一种一对多的依赖关系,以便当某对象的状态改变时,与它存在依赖关系的所有对象都能收到通知并自动进行更新。

Model-View-Controller 底层就是观察者模式。

Java 把它集成到系统库里面:java.util.Observer

C# 把它集成在语言层面 event 关键字。

解锁成就:游戏的成就系统。玩家可能通过不同的行为来获取不同的成就。

托管实现中的代码,不一定被静态编译成相应平台的机器码,执行的方式是由某个环境解释或动态编译。对应的是非托管语言和原生语言。39页。

第5章,原型模式

使用特定原型实例来创建特定种类的对象,并且通过拷贝原型来创建新的对象。47页

数据建模系统?59页

第6章,单例模式

确保一个类只有一个实例,并为其提供一个全局访问入口。

它对并发并不友好。

为实例提供访问方式。

第7章,状态模式

 允许一个对象在其内部状态改变时改变自身的行为。对象看起来好像是在修改自身类。

游戏的有限状态机:你拥有一组状态,并且可以在这组状态之间进行切换。

    状态机同一时刻只能处于一种状态。

    状态机会接收一组输入或者事件。

    每一个状态有一组转换,每一个转换都关联着一个输入并指向另一个状态。

并发状态机

层次状态机

下推自动机

第3篇,序列型模式

第8章,双缓冲

双缓冲模式需要在状态写入完成后进行一次交换操作,操作必须是原子性的。

交换:无论缓冲区有多大,交换的只是一对指针的赋值。

第9章,游戏循环

事件循环

60帧/秒,大约有 16 毫秒的时间来处理一帧。

控制游戏速度:

    非同步的固定时间步长

    同步的固定时长

    变时步长

    定时更新迭代,变时渲染

第10章,更新方法

通过对所有对象实例同时进行帧更新来模拟一系列相互独立的游戏对象。

第4篇,行为型模式

第11章,字节码

第12章,子类沙盒

第13章,类型对象

第5篇,解耦型模式

第14章,组件模式

 允许一个单一的实体跨越多个不同域而不会导致耦合。

第15章,事件队列

对消息或事件的发送与受理进行时间上的解耦。

第16章,服务定位器

第6篇,优化型模式

第17章,数据局部性

通过合理组织数据利用 CPU 的缓存机制来加快内存访问速度。

第18章,脏标记模式

何时清除脏标记。

精心设计的检查点。

第19章,对象池

对象池模式与享元模式看上去很相似。

差异在于重用的含义。

对象池的重用,是对对象一段时间的重用。

第20章,空间分区

常见 305页

网格,四叉树,二叉空间分割,k-dimensional 树,层次包围盒等。

书:

《设计模式:可复用面向对象软件的基础》,读《设计模式:》

完。

发布了1316 篇原创文章 · 获赞 171 · 访问量 400万+

猜你喜欢

转载自blog.csdn.net/wide288/article/details/104156354