管理数据,类或数组的优选方法?

时间:2012-04-07 10:41:55

标签: actionscript-3 design-patterns

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

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

此外,您还应该使用inventoryArray.push(weaponArray[1])方法创建Inventory类,而不是add()。这将允许您在将对象添加到清单时分派事件。然后,前端可以收听此事件,例如,更新库存图形。通常,您不应该使用通用Flash对象(数组,对象等)来处理潜在的复杂对象,例如库存,字符等。使用您自己的自定义类可以让您在游戏变得更加复杂时轻松扩展它们。

答案 1 :(得分:1)

我会说继承的构图是要走的路。

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


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

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