2

我正在 Flash 中制作基于回合的 RPG,使用 AS 3 作为语言,但我很确定无论您使用哪种语言,您都可以帮助我。

基本上,我的想法是将我所有的武器数据放在一个多维数组中。现在,如果我想将武器添加到我的库存中,很简单,我只需使用inventoryArray.push(weaponArray[1])Easy,我只是将武器添加到我的库存中。

我一直在研究设计模式,似乎大多数 OOP 设计都使用类并从超类继承。Component-->Weapon-->Sword-->LongSword.

我应该怎么做,将所有数据放在一个数组中或使用继承样式,一个类包含一个武器?

欢迎任何想法!我基本上知道如何制作游戏本身,只是我不知道我应该遵循的一些模式。

4

2 回答 2

2

游戏中的大多数对象都会有一些共同的属性——例如,它们可能都有一个 ID、一个名称和一个描述。

如果您不使用继承,您的所有类中都会包含这些重复信息,这将使您的游戏难以维护。

如果你确实使用继承,你可以在一个基类(可能是抽象的)中拥有所有这些公共属性,并让所有其他类继承自它。所以是的,你看到的设计模式是要走的路。

inventoryArray.push(weaponArray[1])此外,您还应该使用方法创建一个Inventory类,而不是 do add()。这将允许您在将对象添加到清单时调度事件。然后前端可以监听这个事件,例如,更新库存图形。一般来说,您永远不应该将通用 Flash 对象(数组、对象等)用于可能很复杂的对象,例如物品栏、角色等。使用您自己的自定义类可以让您在游戏变得更加复杂时轻松扩展它们。

于 2012-04-07T10:54:59.233 回答
1

我会说组合而不是继承是要走的路。

有一个基本的游戏对象类可以扩展到武器、戒指、头盔、盾牌、药水等。这些都有一组可以通过继承来管理的限制(比如你只能将武器放在手中和库存中) )。但是所有这些能力(它们如何影响角色)都应该通过组合来完成。每次将对象添加到腰带、手、头等时,它们都会通过构图影响角色。因此,当您处理角色的动作时,您不会遍历每个对象,您只需使用像攻击这样的复合函数,它具有应用部分角色动作的库存的所有功能。


您可以研究的另一种设计模式是装饰器模式。我发现结果与作曲非常相似。“虽然装饰器模式允许我们在没有子类化的情况下向对象添加职责,但复合模式有一个不同的目标:构造类以便以相同的方式处理相关对象,并且可以将多个对象视为一个对象。” 资源

装饰器模式示例: http ://www.as3dp.com/2011/06/well-armored-warrior-decorator-for-beginners/

于 2012-04-07T18:27:03.007 回答