2009-09-04 14 views
0

に投稿する方法。私は3つのボタンを作成するためにループを使用していますが、私の問題は各ボタンにボタンのアクションを割り当てることです。私のボタンリスナ/アクションコードは、最後に作成されたボタンでのみ動作します:(初めて動的に作成されたボタンのアクションを、それぞれ

私はそれらの名前でボタンをターゲットにしようとしましたが($ navButton.name = "button" + i) 。Button1の

任意の助けをいただければ幸い、私はAS3のnoobのだ:「(

function createNav(){ 

    for (var i:Number = 0; i < myXMLArray.length; i++) 
    { 
     $navButton = new NavButton(); 
     $navButton.name = "button" +i; 
     $navButton.x = i * (SIZE + SPACING); 
     $navButton.y = 179; 
     addChild($navButton); 
     trace("$navButton.name = "+$navButton.name); 
     trace("button 1 = "+button1); 

     //trying to give the 3 buttons a simple rollover/click action: 

     $navButton.buttonMode = $navButton.buttonMode = true; 
     $navButton.addEventListener(MouseEvent.MOUSE_UP, navAction); 
     $navButton.addEventListener(MouseEvent.ROLL_OVER, function() {$navButton.nextFrame();}); 
     $navButton.addEventListener(MouseEvent.ROLL_OUT, function() {$navButton.prevFrame();}); 


     //thought I could control via calling the $navButton.name 
     //button1.addEventListener(MouseEvent.MOUSE_UP, navAction); 
     //button1.addEventListener(MouseEvent.ROLL_OVER, function() {button1.nextFrame();}); 
     //button1.addEventListener(MouseEvent.ROLL_OUT, function() {button1.prevFrame();}); 


     /*var traceText:TextField = new TextField(); 
     traceText.defaultTextFormat = a12; 
     traceText.x = i * (SIZE + SPACING); 
     traceText.y = 181; 
     traceText.width = 116; 
     traceText.height = 20; 
     traceText.text = myXMLArray[i].id; 
     addChild(traceText);*/ 
    } 

} 

function navAction() 
{ 

    trace("click"); 
} 

答えて

3

私のような配列の広告へのアクセスにボタンを追加します。ループの外に

ループ内​​

あなたは、単一のボタンにカスタム機能を追加しようとしている場合、これは、ループの外で行われるべきである
buttons.push(navButton) 
buttons[1].addEventListener(MouseEvent.MOUSE_UP, navAction); 

。オブジェクトに名前を付けても、インスタンスという名前のオブジェクトはありません。上記のようにアクセスするには、

var button1:NavButton 

のようにアクセスする必要があります。 nameプロパティを使用すると、次のようなものを使用できます。

if(navButton.name == "button1") 
    navButton.addEventListener(Event.BLAHBLAH, DoStuff); 

匿名関数をイベントリスナーとして使用することを強くお勧めします。代わりに、名前の関数やイベントのtargetプロパティを使用します。

function handleButtonClick(event:MouseEvent):void 
{ 
    var button:NavButton = event.target as NavButton; 
    if(button) 
     button.nextFrame() 
} 

それは無名関数と(おそらく意志)機能かもしれませんが、あなたが名前の関数を使用する場合のデバッグにそんなに簡単になります。

あなたのvarsに$を使用するのは、一般的にAS3では悪いフォームです。 Here's the Flex SDK Standardsは、すべてのAS3プログラミングの優れた規則です。

+0

驚くばかり!それはthxを働いた:D そして、関数名とvar命名についてのヒントについては... –

関連する問題