通过将行为编码成虚拟机指令,而使其具备数据的灵活性。 动机任何的对游戏进行更新修改,都需要进行重新编译,这会浪费更多的时间,同时如果要支持mod,那么就必须要开放源码给玩家,同时确保玩家的代码不会出错,这是很糟糕的设计。我们需要把类似法术从游戏核心转移到安全沙箱中。我们要让它们易于修改,易于重新加载 ...
阅读全文 »

把批处理代码丢给计算机,离开几个小时后再回来查看结果的方式,在程序排错上简直慢得可怕。他们需要即时反馈——于是交互式编程诞生了。真实的游戏循环的第一个关键点:它处理用户的输入,但并不等待输入。游戏循环始终在运转:123456while(true){ processInput(); ...
阅读全文 »

动机计算机显示器的显示设备在每一时刻仅绘制一个像素。显示设备从左至右地扫描屏幕每行中的像素,并如此从上至下地扫描屏幕上的每一行。当它扫描至屏幕的右下角时,它将重定位至屏幕的左上角并如前述那样地重复扫描屏幕。这一扫描过程如此地快速(大概每秒60次),以至于我们的眼睛无法察觉这一过程。对于我们而言,扫描 ...
阅读全文 »

“允许一个对象在其内部状态改变时改变自身的行为。对象看起来好像事在修改自身类。”有限状态机借鉴了计算机里的自动机理论中的一种数据结构思想。有限状态机可以看作是最简单的图灵机。 你拥有一组状态,并且可以在这组状态之间进行切换。 状态机同一时刻只能处于一种状态。 状态机会接受一组输入或者事件。 每一 ...
阅读全文 »

”确保一个类只有一个实例,并为其提供一个全局访问入口。“尽管单例模式的出发点是好的,但在GOF对单例模式的描述中,它通常弊大于利。他们一再强调应当谨慎使用该模式——然而当其应用于游戏产业中时,这一点却往往被忽略了。与任何模式一样,在不合适的地方使用单例模式,就像药不对症,不过首先,我们来看看模式本身 ...
阅读全文 »

“使用特定原型实例来创建特定种类的对象,并且通过拷贝原型来创建新的对象。” 原型设计模式我们游戏里面有3种怪物类型——幽灵、恶魔和术士。原型模式提供了一种解决方案,其核心思想是一个对象可以生成与自身相似的其他对象。如果你有一个幽灵,则你可以通过这个幽灵制作出更多的幽灵。如果你有一个魔鬼,那你就能制作 ...
阅读全文 »

“在对象间定义一种一对多的依赖关系,以便当某对象的状态发生改变时,与它存在依赖关系的所有对象都能收到通知并自动进行更新。”在计算机上随便打开一个应用,它很有可能就是采用Model-View-Controller架构开发,而其底层就是观察者模式。观察者模式应用非常广泛,Java甚至直接把它集成到了系统 ...
阅读全文 »

“使用共享以高效地支持大量的细粒度对象。”游戏中的森林有成千上万的树木,但它们大部分看起来是相似的。它们可能会全部使用相同的网络和纹理数据。这意味着在这些对象实例中,大多数字段都是相同的。很明显,我们可以将对象分割成两个独立的类。首先,我们将所有树木通用的数据放到一个单独的类中:1234567cla ...
阅读全文 »

衡量一个设计好坏的方法就是看它应对变化的灵活性。 我们如何从解耦中受益如果两块代码耦合,意味着你必须同时了解这两块代码,如果你让它们解耦,那么你只需了解其一。对我来说,这是软件架构的一个关键目标:在你前进前,最小化你脑海中的知识存储量。 将一款有趣的游戏做得高效要比将一款高性能的游戏做的有趣更简单些 ...
阅读全文 »