2012-03-02 70 views
1

我正在制作策略游戏并遇到了一种问题。基本上,我不知道如何处理我需要的单位的动态创建。我应该使用一些大开关语句还是有更理想的解决方案?处理多个对象

回答

2

我假设,你实质上是在讨论在运行时实例化不同种类的类。的用途很多:)

一种选择是:

你管理一个地图(基本对象),其中关键是你的“单位”的标识和值是一个类的对象,像这样:

var unitMap:Object = { 
    "hero": UserGameCharacter, 
    "enemy": NPCharacter, 
    "chicken": ChickenCharacter 
}; 

请注意,值是类对象,而不是实例。此外,让我们假设,所有字符类都扩展了基本的Character类或实现了Character接口。现在,当你想实例化一个“单元”时,你应该这样做:

var newCharacter:Character = new (unitMap["hero"])(); 

这样,你就不需要switch语句了。希望,这有助于作为一个起点。

+0

呃... ...所以基本上创造这样一个枚举,然后用字符对象作为我需要创建类的容器,对不对?但是,如果我需要,我将如何能够使用对象构造函数?像unitMap [“hero”](arg)会有用吗? – MKII 2012-03-02 10:00:23

+0

是的,正确的,这将工作。顺便说一句,当然,你也可以直接引用你想创建的类。我只是想,如果你创建的类都是扩展基类或者实现一个接口以方便使用,那可能会很有帮助。这就是我所说的“人物”。 – ghost23 2012-03-02 14:38:27

+0

好吧,我明白了。谢谢。 – MKII 2012-03-03 02:09:50

1

如果您希望动态创建需要构建工作的多种类型的实体,请尝试始终使用抽象工厂。它会让你的游戏更加灵活和模块化。特别是对于策略游戏,您可能会有复杂的逻辑来构建每个单元。看看下面的文章:

http://www.as3dp.com/2010/11/saturated-abstract-factory-1-wholesale-creation/

+0

我的时间有限(因为这个游戏是一个大学项目),所以我可能无法在截止日期前理解和实施上述解决方案,但看起来还是值得一看。谢谢。 – MKII 2012-03-03 02:08:35

1

您可能也想看看按钮引擎,它会提供一些现成的功能来处理所有不同的游戏对象。它具有依赖注入功能,这是分离对象的使用和创建的良好实践。

https://github.com/PushButtonLabs/PushButtonEngine

+0

像上面这样,我会尽快详细看看。谢谢。 – MKII 2012-03-03 02:16:57