游戏编程模式(慨念篇)

来源:游戏编程模式(Robert Nystrom)著

命令模式:将一个请求(request)封装成一个对象,从而允许你使用不同的请求、队列、或日志将客户端参数化,同时支持请求操作的撤销与恢复。

 

享元模式:通过将对象数据切分成两种类型来解决问题。第一种类型数据是那些不属于单一实例对象并且能够被所有对象共享的数据。GoF将其称为内部状态(the intrinsic state)。其他数据便是外部状态(the extrinsic state),对于每一个实例它们都是唯一的。

 

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

 

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

 

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

 

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

 

序列型模式:

1.双缓冲模式:用序列的操作模拟瞬间或者同时发生的事情。通俗地讲就是一个后台缓冲来接受数据,当填充完整后交换到前台缓冲,这样就保证了前台缓冲里的数据都是完整的。

2.游戏循环模式:一个游戏循环会在游戏过程中持续地运转。每循环一次,它非阻塞地处理用户的输入,更新游戏状态,并渲染游戏。它跟踪流逝的时间并控制游戏的速率。

3.更新方法模式:游戏世界维护一个对象集合。每个对象实现一个更新方法以在每帧模拟自己的行为。而游戏循环在每帧对集合中所有的对象调用其更新方法,以实现和游戏世界同步更新。

行为型模式:

1.字节码模式:指令集定义了一套可以执行的底层操作。一系列指令被编码为字节序列。虚拟机逐条执行指令栈上这些指令。通过组合指令,即可完成很多高级行为。(通过将行为编码成虚拟机指令,而使其具备数据的灵活性。)

2.子类沙盒模式:一个基类定义了一个抽象的沙盒方法和一些预定义的操作集合。通过将它们设置为受保护的状态以确保它们仅供子类使用。每个派生出的沙盒子类根据父类提供的操作来实现沙盒函数。

3.类型对象模式:定义一个类型对象类和一个持有类型对象类。每个类型对象的实例表示一个不同的逻辑类型。每个持有类型对象类的实例引用一个描述其类型的类型对象。(通过创建一个类来支持新类型的灵活创建,其每个实例都代表一个不同的对象类型)

 

解耦型模式:

1.组件模式:单一实体横跨了多个域。为了能够保持域之间相互隔离,每个域的代码都独立地放在自己的组件类中。实体本身则可以简化为这些组件的容器。(允许一个单一的实体跨越多个不同域而不会导致耦合)

2.事件队列模式:事件队列是一个按照先进先出顺序存储一系列通知或请求的队列。发出通知时系统会将该请求置入队列并随即返回,请求处理器随后从事件队列中获取并处理这些请求。请求可由处理器直接处理或转交给对其感兴趣的模块。这一模式对消息的发送者与受理者进行了解耦,使消息的处理变得动态且非实时。

3.服务定位器模式:一个服务类为一系列操作定义了一个抽象的接口。一个具体的服务提供器实现这个接口。一个单独的服务定位器通过查找一个合适的提供器来提供这个服务的访问,它同时屏蔽了提供器的具体类型和定位这个服务的过程。

 

优化型模式:

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

2.脏标记模式:将工作推迟到必要时进行以避免不必要的工作。

3.对象池:使用固定的对象池重用对象,取代单独地分配的释放对象,以此来达到提升性能和优化内存使用的目的。

4.空间分区:将对象存储在根据位置组织的数据结构来高效地定位它们。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值