2012-05-01 13 views
2

私は配列を持っているとしましょう、配列の各項目には対応するライブラリ項目があります。AS3:配列の値に基づくAddChild

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) 

をしかし、これは動作しません:

私のような何かをしたいと思います。秘密は何ですか?あなただけのいくつかの選択肢を持っている場合は

ヴィクトル・ユーゴー

+0

「これは動作しません」 - どのくらい正確に?エラーまたは予期しない動作? –

+0

まず、ランダム変数をラウンドさせずにフロアしたいとします。 'var rando = Math.floor(Math.random()* 3);' –

+2

あなたがしていることをよく見てください - 'addChild(" ball ")'はうまくいくと思いますか? – Marty

答えて

0

、ありがとうございました、それがスイッチケースを使用する方が簡単です。

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

私はあなたはそれがボール、壁、秋の両方としてインスタンス化することができ、その場合にはMovieClip、として変数を定義しi示唆しています。

ボール、ウォール、フォールがライブラリ内にあるので、actionscriptにエクスポートされます。

1

だから、これにはいくつかの問題があります。

大きな数字がvar i:myArray[rando] = myArray[rando] new myArray[rando]()ここで何をしようとしているかわからない。

とにかく、ボール、ウォール、フォールはあなたのライブラリにあるムービークリップのインスタンス名です。私はあなたがこのようなものをしたいと思うと思う。

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を保持する必要があります

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); 
} 
-1

Marty Wallaceは、getDefinitionByName()のパスを私に指示してくれたことについて大きな賞賛を受けています。彼が投稿した例は良いものでしたが、この例はまさに私が行っていたことです。

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

+0

私は*本当に*これは答えのどれも驚いていません。 – Marty

+0

私は完全な答えを加えました。あなたは[回答を受け入れる](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)に精通していますか? :) – Marty

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); 
0

変更あなたのarraryラインへ::これは動作するはず

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

はここにあなたの例では、作業を取得するためのいくつかの完全なコードです。:)

関連する問題