我正在寻找一些关于设计模式的好书,我想知道你会为实时战略游戏(如星际争霸)、MVC 推荐哪种特定模式?.
我想在某个时候在 Flash 中制作一个基本的 RTS,我想开始研究最好的模式。
干杯!
我正在寻找一些关于设计模式的好书,我想知道你会为实时战略游戏(如星际争霸)、MVC 推荐哪种特定模式?.
我想在某个时候在 Flash 中制作一个基本的 RTS,我想开始研究最好的模式。
干杯!
这类问题的问题在于答案完全取决于您的设计。RTS 游戏即使是简单的游戏也很复杂。他们有许多必须协同工作的系统,并且每个系统都必须以不同的方式设计,以实现共同的目标。
但是在这里稍微谈一下。
rts 中的 AI 系统通常有几个不同的级别。有单元级 AI,它可以像基于开关的状态机一样简单,一直到完整的行为树(复合/装饰器)。您通常还需要某种类型的战略级 AI 高级规划系统。(指挥官级别和 AI 玩家)通常在这些级别之间还有一些级别,以及资源管理器等一些附带的东西。您还可以使用基于事件的系统,这些系统也与 flash 的基于事件的模型很好地结合在一起。
对于主游戏引擎本身,可以轻松实现基本状态机(从基于开关到基于函数再到基于类的任何内容)以将所有内容联系在一起并与菜单系统相关联。
对于单个玩家来说,模型-视图-控制器是一种非常自然的目标模式,因为您希望您的 AI 玩家能够接触到人类玩家可以访问的所有内容。因此,唯一的变化将是控制器(大脑),显然不需要视图。
正如我所说,这不是像普通的 stackoverflow 问题那样可以回答的问题,它完全取决于设计以及您决定如何实现它。(像大多数事情一样)有大量关于 RTS 游戏设计的资源,我能真正给出的唯一建议是全部接受。即使是简单的 RTS 也是复杂的系统。
祝你好运,我希望这篇文章能让你知道如何思考它。(记住余额是 RTS 中的一切)
要支持大量单元,您可以使用Flyweight和Object Pool。Flyweight 对象可以完全存储在一个大的 ByteArray 中的几个字节中。要获取可用对象,请读取相应的字节,取出空对象并用这些字节中的数据填充它。对象池可以保存那些可用的对象以防止持续分配/垃圾收集。这样,您可以在 ByteArray 中保存数千个单元,并通过十几个池化对象 shell 来管理它们。
应该注意的是,这更适合存储单元的图块属性,但是——图块或多或少是静态的,而单元是定期创建和销毁的。
熟悉一些设计模式并在适当的时候将它们应用到游戏架构中会很好。
例如,您可以为整个应用程序使用 MVC 架构、创建敌人的工厂模式、商店物品的装饰器模式等。重点是,设计模式只是构造对象的方法。如何定义这些对象以及如何决定它们如何组合在一起是非规定性的。