随笔分类 - 编程模式
摘要:通过合理组织数据利用CPU的缓存机制来加快内存访问速度。 (摘自《游戏编程模式》) 现代计算机硬件被木桶效应约束着——CPU逐年增长的速度迅猛,而较为遗憾的是RAM访问速度却是逐年迟缓。速度的不匹配使得CPU的能力收到了极大的限制——虽然它处理数据很快,但是获取数据的速度却很慢。这意味着CPU更多的
阅读全文
摘要:为某服务提供一个全局访问入口来避免使用者与该服务具体实现类之间产生耦合。 (摘自《游戏编程模式》) 对于一些在游戏系统各处都可能调用的系统、对象或函数,如果(利用静态类或单例模式)直接调用也会造成一定的耦合——当我们对静态类或单例模式的调用方式进行修改时,我们就需要找到各个调用的代码块并进行修改,而
阅读全文
摘要:对消息或事件的发送与受理进行时间上的解耦。 (摘自《游戏编程模式》) 事件队列模式维护着一个事件队列。元命令入队意味着我们主观想要立即想要执行该命令的相关操作;而出队意味着响应执行该命令相关的操作。受限于各种硬件和软件的情况,这些命令执行并不是立即响应的,但顺序是固定的、也不会出现命令遗漏的情况。我
阅读全文
摘要:允许一个单一的实体跨越多个不同域而不会导致耦合。 (摘自《游戏编程模式》) 组件模式又是一个采用“Have One”实现多态的模式。从客观上来说,Unity引擎的GameObject就是使用组件尤为成功的例子。在使用Unity开发中,我们可以给一个GameObject添加引擎自带或自己编写的组件。下
阅读全文
摘要:通过创建一个类来支持新类型的灵活创建,其每个实例都代表一个不同的对象类型。 (摘自《游戏编程模式》) 有两种实现多态的方式,“Have One”和继承。而类型对象模式就是运用“Have One”。类型对象模式的处理和享元模式类似,都是需要将一类对象的共有部分独立成一个类并采用“Have One”将其
阅读全文
摘要:使用基类提供的操作集合来定义子类中的行为。 (摘自《游戏编程模式》) 沙盒(英语:sandbox,又译为沙箱)是一种安全机制,为运行中的程序提供的隔离环境。 (摘自维基百科) 在我看来,子类沙盒模式就是一种是代码更紧凑为目的的模式,它更好的约束了程序员对继承的肆意使用。为什么这么说呢?首先我们要了解
阅读全文
摘要:通过将行为编码成虚拟机指令,而使其具备数据的灵活性。 (摘自《游戏编程模式》) 游戏是一个庞大的工程,因此,在开发的过程中我们会选用高稳定性和高效率的重型语言,例如C++。C++的每一次代码更新都需要编译,然而庞大的代码量使得编译时间变得很长。因此,我们需要想办法将可自定义性高、变动可能性高的部分从
阅读全文
摘要:通过对所有对象实例同时进行帧更新来模拟一系列相互独立的游戏对象。 (摘自《游戏编程模式》) 游戏状态更新最好由游戏循环进行调用,而非重新编写while()循环代码,但当我们使用Unity开发游戏的时候,我们有接触到游戏循环的代码吗?我们如何将需要实时调用的代码添加到游戏循环中?相比Unity开发者都
阅读全文
摘要:实现用户输入和处理器速度在游戏行进时间上的解耦。 (摘自《游戏编程模式》) 游戏作为一个实时互动软件,实时是其核心。在程序里,总有那么一段代码一直在软件运行周期里不断重复着以监听着用户的输入,并根据输入进行对应的响应,这就是游戏循环代码。要注意的是,在游戏循环中不会出现类似UI事件循环中的阻塞,即使
阅读全文
摘要:问题引入 尽管计算机的处理能力相比过去有了极大的进步。但对于实时渲染的游戏程序,仍旧不能在一瞬间将同屏的所有物件全部加载出来。即使可以,用户的硬件条件参差不齐,若运行在性能较低的机器,用户将看到破碎断续加载的画面。 从更底层形象地看断续加载的原因,就要了解画面是如何绘制的。计算机维护着一个帧缓冲区,
阅读全文
摘要:允许一个对象在其内部状态改变时改变自身的行为。对象看起来好像是在修改自身类。。 (摘自《游戏编程模式》) 我们熟悉的名词:有限状态机(finite state machines,fsm)就是状态模式的应用。正如Unity 的动画状态机。 状态机 根据上面给出Unity游戏引擎的Animator状态机
阅读全文
摘要:确保一个类只有一个实例,并为其提供一个全局访问入口。 (摘自《游戏编程模式》) 在GoF中对单例模式的描述中,它通常弊大于利。我的实际编码过程很喜欢使用单例,因为它让代码更加整洁,且访问函数时很便捷。然而,同样要注意的是,单例模式具有很多缺点缺点,我们需要知道如何在使用中避免这些弊端的影响。 单例模
阅读全文
摘要:使用特定原型实例来创建特定种类的对象,并且通过拷贝原型来创建新的对象。 (摘自《游戏编程模式》) 原型模式很简单,简单到我们看到描述的定义就能知道大概如何实现。然而,在当时没有泛型编程的时代,能够将代码按照原型模式进行设计也是花费了很大功夫去组织的。我们需要体会设计一步步实现的思考过程。 原型模式主
阅读全文
摘要:在对象间定义一种一对多的依赖关系,以便当某对象的状态改变时,与它存在依赖关系的所有对象都能收到通知并自动进行更新。 (摘自《游戏编程模式》) 我们很熟悉的MVC模式,其底层就是观察者模式。Java中的java.util.Observer和C#的event更是将观察者模式集成于语言层面中。 要如何理解
阅读全文
摘要:使用共享模式以高效地支持大量的细粒度对象。 (摘自《游戏编程模式》) 该如何介绍共享模式呢?其实,“共享”一词就给出了答案。顾名思义,共享是指将一份作为共有部分供大多数运用。其实,我个人认为它的本质就是抽象化,即将一组对象的公共部分抽象起来并作为一个实例,这一实例将存储于所有对象中,供其使用。这样的
阅读全文
摘要:将一个请求(request)封装成一个对象,从而允许你使用不同的请求、队列或日志将客户端参数化,同时支持请求操作的撤销与恢复。 命令就是一个对象化(实例化)的方法调用(A command is a reified method call)。 命令就是面向对象化的回调(Commands are an
阅读全文

浙公网安备 33010602011771号