如何使对象的键更具动态性?

时间:2014-02-18 19:20:14

标签: arrays actionscript-3 flash

我有一个AssetManager单例,我用它作为各种数据提供者。

public static var L1_1:Object = {pic:'../Assets/images/test.jpg', answer:'someAnswer', pool: 'somePool'}

所以我试图在另一个类中使用它来获取一个图像类的路径,该图像类将字符串作为一个参数,如下所示:

var image:Image = new Image(AssetManager.L1_1.pic , 540, 540);

这很好用,但是,我需要增加上面的第二个“1”以使其动态,所以我可以说例如,

var image:Image = new Image(AssetManager.L1_5.pic , 540, 540);

我尝试过这样的事情,传递一个imageNum属性但无法对其进行排序。

var tempObj:Object = ['AssetManager.L' + imageNum + '_' + imageNum + '.pic']; trace(tempObj)

有更简单的方法吗?谢谢!

2 个答案:

答案 0 :(得分:0)

我现在通过简单地使用这样的数组来修复:

public static var L1_1:Array = new Array(); L1_1[0] = ['../Assets/images/test.jpg', "apple", "appletakeout"];

用以下方式调用它:

image = new Image(AssetManager.L1_1[0][imageNum], 540, 540);

它有效,只是感觉有点乱。如果有更有效的方法来做到这一点,我很乐意听到。感谢。

答案 1 :(得分:0)

可以使用括号语法访问AS3中的静态和公共属性。

以下是一个例子:

public static var L1_1:Object = {pic:'../Assets/images/test.jpg', answer:'someAnswer', pool: 'somePool'};

var imageNum:int = 1;
var propertyName:String = "L1"+ "_" + imageNum.toString();
var tempObj:Object = AssetManager[propertyName]; 
var pathToPic:String = tempObj.pic;
trace(pathToPic);

上面的示例应该追溯../Assets/images/test.jpg

但是,请注意括号语法比点语法慢,并且在编译时不进行类型检查。

我希望这会有所帮助。