哪种设计模式最适合AS3中的RTS游戏?

问题描述 投票:0回答:3

我正在寻找有关设计模式的好书,并且我想为实时策略游戏(如Starcraft),MVC建议使用哪种特定模式?

我想在某个时候在Flash中制作一个基本的RTS,我想开始为此研究最佳模式。

干杯!

actionscript-3 flash model-view-controller design-patterns behavior-tree
3个回答
4
投票

这类问题的问题是答案,这完全取决于您的设计。 RTS游戏既复杂又简单。他们有很多系统必须协同工作,并且每个系统都必须以共同的目标进行不同的设计。

但是这里要谈一点。

rts中的AI系统通常具有几个不同的级别。单元级别的AI可以一直像基于开关的状态机一样简单,一直到完整的行为树(复合/装饰器)。对于战略级AI,您通常还需要某种类型的高级计划系统。 (指挥官级别和AI播放器)在这些资源和诸如资源管理器之类的一些副产品之间通常存在一些层次。您还可以使用基于事件的系统,该系统也可以与Flash的基于事件的模型很好地结合。

对于主游戏引擎本身,基本状态机(从基于开关的切换到基于功能的切换,再到基于类的任何切换,都可以很容易地实现,以将所有内容绑定在一起,并以此与菜单系统绑定。

对于单个玩家,模型-视图-控制器是一种非常自然的模式,因为您希望您的AI玩家能够接触到人类玩家可以访问的所有内容。因此,唯一的变化就是控制器(大脑),而无需明显的视图。

正如我说的那样,这不能像正常的stackoverflow问题那样得到回答,它完全取决于设计以及您决定如何实现它。 (就像大多数事物一样)关于RTS游戏设计的资源很多,而将其全部吸收是我真正能给出的唯一建议。甚至简单的RTS都是复杂的系统。

祝您好运,我希望这篇文章能给您一个思考的想法。 (记住余额是RTS中的所有内容)


0
投票

要支持很多单元,可以使用FlyweightObject Pool。 Flyweight对象可以完全存储在大型ByteArray中的几个字节中。要获得可用的对象,请读取相应的字节,获取空对象,并用这些字节中的数据填充它。对象池可以容纳那些可用的对象,以防止不断分配/收集垃圾。这样,您可以在ByteArray中容纳数千个单元,并通过许多池化的对象外壳程序对其进行管理。应该注意的是,这更适合于存储单位的图块属性,但是,图块几乎是静态的,而单位是定期创建和销毁的。


0
投票

熟悉许多设计模式,并在适当的情况下将其应用于游戏的体系结构会很好。

例如,您可以在整个应用程序中使用MVC架构,在工厂中创建敌人的工厂模式,在商店物品上使用装饰器模式,等等。要点是,设计模式只是构造对象的简单方法。如何定义这些对象以及如何确定它们如何组合是没有规定的。

© www.soinside.com 2019 - 2024. All rights reserved.