2

假设我有一个数组,数组中的每个项目都有一个对应的库项目。

我想做类似的事情:

var rando = Math.round(Math.random()*3)
var myArray = new Array ["ball", "wall", "fall"]
var i:myArray[rando] = myArray[rando] new myArray[rando]()
addChild(i)

但是,这行不通。秘诀是什么?

谢谢你,

维克多·雨果

4

6 回答 6

4

令这里没有人感到惊讶getDefinitionByName()

这是一些完整的代码,可以让您的示例正常工作:

var myArray = ["ball", "wall", "fall"];

/**
 * Creates a random instance based on an input array containing class names as Strings.
 * @param The input array containing aforementioned Strings.
 * @return The newly created instance.
 */
function createRandom(typeArray:Array):*
{
    // Select random String from typeArray.
    var selection:String = typeArray[ int(Math.random() * typeArray.length) ];

    // Create instance of relevant class.
    var Type:Class = getDefinitionByName(selection) as Class;

    // Return created instance.
    return new Type();
}


// Randomly create and add instance.
var instance:DisplayObject = createRandom(myArray);
addChild(instance);
于 2012-05-03T04:46:41.453 回答
1

好的,所以这有很多问题。

一个很大的人var i:myArray[rando] = myArray[rando] new myArray[rando]()不太确定你在这里要做什么。

无论如何,我将假设 ball、wall 和 fall 是您库中的 MovieClip 的实例名称。我想你会想要这样的东西

 var rando:int = Math.floor(Math.random()*3); //As the comments point out this should give you a random 
//int between 0 and 2, arrays are 0 indexed so this is what we want if we have 3 items

现在对于您的数组,您当前正在将字符串放在那里。Flash 不知道什么是“球”等。

尝试这样的事情

var myArray:Array = new Array [new ball(), new wall(), new fall()]; //this creates a new instance of your library object and stores it in your array

现在将其中之一添加到您的阶段:

addChild(myArray[rando]); //this uses the random number to pull one of the items out of your array

你试图做什么var i:myArray[rando]并没有真正的意义。没有 myArray[rando] 的类型,这个插槽应该包含一个 MovieClip

于 2012-05-02T00:05:20.513 回答
0

如果您只有几个选择,使用 switch-case 会更容易。

switch (rando) {
   case 0:
       i = new ball();
       break;
   case 1:
       i = new wall();
       break;
   case 2:
       i = new fall();
       break;
}
addChild(i);

我建议您将变量定义i为 a MovieClip,在这种情况下,它可以同时实例化为 ball、wall、fall。

鉴于 ball、wall 和 fall 都在导出到 actionscript 的库中。

于 2012-05-02T00:02:28.927 回答
0

只是猜测您有限的信息,但试一试。

private function myFunction():void{
    var rando = Math.round(Math.random()*3);
    var myArray= new Array ["ball", "wall", "fall"];

}
private function generateItem(item:String):void{
    switch(item){
        case "ball" : generateBall(); break;
        case "wall" : generateWall(); break;
        case "fall" : generateFall(); break;
}

private function generateBall():void{
//code to generate ball
addChild(ball);
}

private function generateFall():void{
//code to generate fall
addChild(fall);
}

private function generateWall():void{
//code to generate wall
addChild(wall);
}
于 2012-05-02T00:06:47.320 回答
0

将您的 arary 行更改为:

 var myArray = new Array [ball, wall, fall];

这应该有效。:)

于 2014-01-09T08:26:06.490 回答
-1

Marty Wallace 因引导我走上 getDefinitionByName() 的道路而备受赞誉。他发布的例子很好,但这个例子正是我想要的。

http://www.emanueleferonato.com/2011/03/31/understanding-as3-getdefinitionbyname-for-all-eval-maniacs/

于 2012-05-03T04:35:19.987 回答