摘要:
写在前面 “将对象存储在根据位置组织的数据结构中来高效的定位它们。” 动机 游戏使我们能够探寻其它世界,但这些世界和我们的世界往往并无太大差异。其中的基本物理规则和确切性常常与我们的世界互通。这也正是这些由像素构成的世界看上去如此真实的原因。 我们在者虚拟现实中将要关注的一点就是位置。游戏世界具有空 阅读全文
摘要:
“使用固定的对象池重用对象,取代单独的分配和释放对象,以此来达到提升性能和优化内存使用的目的。” 动机 假设我们正在致力于游戏的视觉效果优化。当英雄释放魔法时,我们想让一个火花在屏幕上炸裂。这通常需要一个粒子系统(一个用来生成大量小的图形并在它们生存周期产生动画的引擎)来实现。而这个粒子系统实现这个 阅读全文
摘要:
“将工作推迟到必要时进行以避免不必要的工作。“ 动机 许多游戏都有一个场景图的东西。这是一个庞大的数据结构,包含了游戏世界中所有的物体。渲染引擎使用它来决定物体绘制到屏幕上的什么地方。通常来说,游戏中的物体都含有一个形状或者说模型,和一个”变换“。这个变换是一个包含物体位置、旋转角度和物体大小的一个 阅读全文
摘要:
“通过合理组织数据利用CPU的缓存机制来加快内存的访问速度。” 动机 现今硬件设备发展极快,曾今一度符合摩尔定律,这很容易让人产生一个错觉,好像软件开发者不需要再花费很大的力气就能使程序飞奔起来。但现实是,芯片确实是快了,这让我们能更快的处理数据,但获取数据的速度却没有很大的改变。也就是说,虽然CP 阅读全文
摘要:
“为某服务提供一个全局访问入口来避免使用者与该服务具体实现类之间产生耦合。” 动机 在游戏编程中,某些对象或系统几乎出现在程序的每个角落,比如内存分和日志记录。我们把类似这样的系统认为是游戏中需要被随时访问的服务。我们使用音频作为例子,虽然不像内存分配那么底层,但也是有很多的游戏模块会涉及。比如石块 阅读全文
摘要:
“对消息或事件的发送与受理进行事件上的解耦。” 动机 如果你曾从事过用户界面编程,那肯定对“事件”不陌生了。每当你在界面中点击一个按钮或下拉菜单,系统都会生成一个事件,系统会把这个事件抛给你的应用程序,你的任务就是获取到这些事件并将其与你自定义的行为关联起来。那么为了获取到这些事件,你的代码通常都会 阅读全文
摘要:
“允许一个单一的实体跨越多个不同域而不会导致耦合。” 动机 在游戏的编程中,我们很容易写出一个超级大而且耦合度很高的类来。比如我们的英雄角色,我会使用各种输入设备来操纵它,会给他添加华丽的技能特效和音效,这就需要我们写很多的代码了,有读取控制器输入的代码,有物理和碰撞的代码,有音效的代码,还有播放动 阅读全文
摘要:
写在前面 “通过创建一个类来支持新类型的灵活创建,其每个实例都代表一个不同的对象类型。“ 动机 在RPG游戏中,我们通常会创建很多的怪物来作为我们主角的敌人,比如说恶龙、野狼等。怪物具有一系列的属性:生命值、攻击力、图形效果、声音表现等。每一种怪物的属性不同,比如生命值,龙具有比野狼跟多的初始生命值 阅读全文
摘要:
写在前面 “使用基类提供的操作集合来定义子类中的行为。“ 动机 在游戏中,我们可以实现各种各样的想法,比如说创造一个超级英雄, 我们为超级英雄创造各种能力。这个时候我们可以怎么做了?建立一个superpower的基类,然后使用派生的想法,构建各种派生类来实现超能力。但这里会很快的出现问题,因为超能力 阅读全文
摘要:
写在前面 ”通过将行为编码成虚拟机指令,而使其具备数据的灵活性。” 动机 制作游戏很有趣,但制作游戏却不易,特别是现在的游戏。现代游戏随着硬件技术的发展,游戏内容和玩法变得越来越丰富多样,在以前可能代码就几千行,但现代游戏的代码往往能达到几十万甚至几百万行。这么大的代码量,如果我们选择了c++这样的 阅读全文