“将对象存储在根据位置组织的数据结构中来高效地定位它们。” 动机游戏世界具有空间感,对象则分布于空间之中。这一点从多方面展现出了游戏世界:一个明显的例子就是物理——对象的移动、碰撞和相互影响。这意味着你的游戏引擎通常需要解决这个问题:“对象的附近有什么物体?”如果在每一帧中它不得不对此进行反复检测的 ...
阅读全文 »

“使用固定的对象池重用对象,取代单独地分配和释放对象,以此来达到提升性能和优化内存使用的目的。” 动机一个魔棒就会生成数以百计的粒子,所以我们的系统需要非常快速地生成它们。更重要的是,我们需要确保创建和销毁它们时不会产生内存碎片。 碎片化的害处为游戏机和移动设备编程在多方面都比传统的PC编程更接近于 ...
阅读全文 »

“将工作推迟到必要时进行以避免不必要的工作。” 动机许多游戏都有一个称之为场景图的东西。这是一个庞大的数据结构,包含了游戏世界中所有的物体。渲染引擎使用它来决定将物体绘制到屏幕的什么地方。许多场景图是分层的。场景中的一个物体会绑定在一个父物体上。在这种情况下,它的变换就依赖于其父物体的位置,而不是游 ...
阅读全文 »

通过合理组织数据利用CPU的缓存机制来加快内存访问速度。 动机CPU的速度飞速增长,但RAM访问速度却增长迟缓。我们能更快地处理数据,但我们却不能更快地获取数据。为了使CPU进行大量的计算,实际上它需要从主存中取出数据并置入寄存器中。实际上,至今的CPU会花惊人的时间来等待内存。当代计算机在其芯片内 ...
阅读全文 »

对消息或事件的发送与受理进行事件上的解耦。 动机对于一个游戏而言维护它自身的事件队列作为其神经系统的主干是很常见的。你会常常听到“中心式”、“全局的”、“主要的”类似这样的描述。它被用于那些希望保持模块低耦合的游戏,起到游戏内部高级通信模块的作用。假设你的游戏有一个新手教程,该新手教程会在完成指定的 ...
阅读全文 »

通过创建一个类来支持新类型的灵活创建,其每个实例都代表一个不同的对象类型。 动机设想我们在开发一款奇幻RPG游戏。我们的任务是为凶狠的怪物群编写代码,它们会追杀我们主角。怪物具有一系列属性:生命值、攻击力、图形效果、声音表现等,但我们仅以生命值和攻击力为例。设计师告诉我们怪物的种类繁多,怪物的种类决 ...
阅读全文 »

“使用基类提供的操作集合来定义子类中的行为。” 动机每个孩子都有一个超级英雄梦,但是理想很丰满,现实很骨感。玩游戏或许是令你成为超级英雄的最佳途径。因为游戏设计师从来不会说“不”,我们的超级英雄游戏目标是提供成百上千种不同的超能力以供玩家选择。我们的计划是建立一个Superpower基类,然后,我们 ...
阅读全文 »

“使用基类提供的操作集合来定义子类中的行为。” 动机每个孩子都有一个超级英雄梦,但是理想很丰满,现实很骨感。玩游戏或许是令你成为超级英雄的最佳途径。因为游戏设计师从来不会说“不”,我们的超级英雄游戏目标是提供成百上千种不同的超能力以供玩家选择。我们的计划是建立一个Superpower基类,然后,我们 ...
阅读全文 »

通过对所有对象实例同时进行帧更新来模拟一系列相互独立的游戏对象。 动机它要为游戏中的每个实体封装其自身的行为。这将使游戏循环保持整洁并便于往循环中增加或移除实体。为了做到这一点,我们需第十章 更新方法.md要一个抽象层,为此定义一个update()的抽象方法。游戏循环维护对象集合,但它并不关心这些对 ...
阅读全文 »