2016-07-17 2 views
1

"sostaletters"と呼ばれる6つのボタンと、 "addedletters"という6つの要素を持つ配列を持っています。私が欲しいのは、ステージに追加される配列 "addedletters"から新しいムービークリップがクリックされるたびにです。例えば、配列 "sostaletters"の3番目の要素がクリックされた場合、配列の3番目の要素 "addedletters"がステージに追加されます。どのように私はそれを行うことができますか?配列の要素がas3でクリックされたときにステージ上にムービクリップを追加する

は、これは私が私の配列「sostaletters」

var sostaletters:Array = [a7,a17,a24,a1,a18] 
    for each (var letter:MovieClip in sostaletters) { 
     letter.buttonMode = true; 
     letter.isClicked = false; 
     letter.addEventListener(MouseEvent.CLICK, kanoklick2); 
     function kanoklick2(event:MouseEvent):void 
{ 
     event.target.alpha = 0.5; 
     if(event.currentTarget.isClicked == false){ 
     clickCount2 ++; 
     event.currentTarget.isClicked = true; 
     sostaletters[i].x = positionsArray[i].xPos; 
     sostaletters[i].y = positionsArray[i].yPos; 
     setChildIndex(MovieClip(e.currentTarget), numChildren - 1); 
} 
if(clickCount2 == sostaletters.length){ 
    addChild(welldoneman); 
    myTimer.start(); 
     if (contains(kremmala)) { 
     removeChild(kremmala) 
     } 
for (var i:int= 0; i< wrongletters.length; i++) 
{ 
    wrongletters[i].removeEventListener(MouseEvent.CLICK, kanoklick); 
} 
for (var o:int= 0; o< sostaletters.length; o++) 
{ 
    sostaletters[o].removeEventListener(MouseEvent.CLICK, kanoklick2); 
} 
trace("All buttons have been clicked"); 

} 
} 
} 
+1

クリックされているステージ上の文字は、クラスのインスタンスですか?そのクラスに配列内の何番目の要素を定義するプロパティを与えることができますか?そうであれば、clickイベントのtarget._elemNumを実行して、探している要素を引き出すために他の配列に渡すことができる値を取得できます。 –

答えて

0

ニール・デイヴィスは、すでに正しい答えを与えたためにやっていることです。しかし、私はコードの見直しを行い、より明確にします。コードの私のコメントを見てください。

var sostaletters:Array = [a7,a17,a24,a1,a18] 
// "sostaletters" is an Array. So it is better to use iteration by index 
for each (var letter:MovieClip in sostaletters) { 
    letter.buttonMode = true; 
    letter.isClicked = false; 
    letter.addEventListener(MouseEvent.CLICK, kanoklick2); 

    // You will create "kanoklick2" function at each iteration. 
    // Move this declaration from this loop 
    function kanoklick2(event:MouseEvent):void { 
    event.target.alpha = 0.5; 

    // There is no need to compare a boolean property with "false" or "true" 
    // You can write "if(event.currentTarget.isClicked)" 
    if(event.currentTarget.isClicked == false) { 
     clickCount2 ++; 
     event.currentTarget.isClicked = true; 

     // You declare an "i" variable below. 
     // So the compiler will not fire en error. 
     // But you will not get an index of the current letter. 
     sostaletters[i].x = positionsArray[i].xPos; 
     sostaletters[i].y = positionsArray[i].yPos; 
     setChildIndex(MovieClip(e.currentTarget), numChildren - 1); 
    } 

    // If number of "sostaletters" are not changed 
    // you can save its value in a variable for an example "sostalettersNum" 
    if (clickCount2 == sostaletters.length) { 
     addChild(welldoneman); 
     myTimer.start(); 
     if (contains(kremmala)) { 
     removeChild(kremmala) 
     } 

     // You declare an "i" variable. And use it above to get a current letter. 
     // But an "i" will not contain its index. 
     // It will be equal to "wrongletters.length" 
     for (var i:int= 0; i
関連する問題