假设我有一个数组,数组中的每个项目都有一个相应的库项目。
我想做点什么:
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)
但是,这不起作用。秘密是什么?
谢谢,
Victor Hugo
答案 0 :(得分: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);
答案 1 :(得分:1)
好的,这有很多问题。
一个很大的var i:myArray[rando] = myArray[rando] new myArray[rando]()
并不太确定你在这里想做什么。
无论如何,我要假设球,墙和秋天都是你库中的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
答案 2 :(得分:0)
如果你只有几个选择,那么使用开关盒会更容易。
switch (rando) {
case 0:
i = new ball();
break;
case 1:
i = new wall();
break;
case 2:
i = new fall();
break;
}
addChild(i);
我建议您将变量i
定义为MovieClip
,在这种情况下,它可以实例化为ball,wall,fall。
鉴于球,墙和秋天都在图书馆中导出到actionscript。
答案 3 :(得分: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);
}
答案 4 :(得分:0)
将您的arrary行改为:
var myArray = new Array [ball, wall, fall];
这应该有效。 :)
答案 5 :(得分:-1)
Marty Wallace因为引导我走上getDefinitionByName()的道路而获得了极大的赞誉。他发布的例子很好,但这个例子完全符合我的目的。