2011-02-10 13 views
0

私のステージには7つのボタンがあります(buttonA、buttonBなど)。 私はRollOverを制御したい、RollOut & AS3のCLick。AS3ボタンの状態

最初に私は、私はちょうど(2)ロールオーバー状態であるところ

すなわちgotoAndStopを行くために私のボタンのリスナーを言うことができると思いました。 またはクリック状態のgotoAndStop(3)。 およびgotoAndStop(1)はRollOut状態です。

しかし、「クリック」してから展開すると、他のボタンがクリックされるまで「クリック」したままにする必要があります。

これを理解できないようです。どんな助けもありがとう。

答えて

0

うーん...

私は、ボタン要素の範囲内でロールオーバーとプレスの機能を維持し、永久クリック状態のためのフレーム2を行うだろう。

[これはすぐに書かれたコードですが、あなたのアイデアを得るでしょう]

あなたには、いくつかの親が各ボタンの機能と個々のクリックハンドラを「リセット」してい必要がありますようです。

buttonA.addEventListener(MouseEvent.MOUSE_DOWN, buttonADown); 


function resetButtons(){ 
    buttonA.gotoAndStop(1); 
    buttonB.gotoAndStop(1); 
    buttonC.gotoAndStop(1); 
    buttonD.gotoAndStop(1); 
    buttonE.gotoAndStop(1); 
    buttonF.gotoAndStop(1); 
    buttonG.gotoAndStop(1); 
} 

function buttonADown(e.Mouse_Event):void{ 

    resetButtons(); //RESET ALL PREVIOUSLY CLICKED BUTTONS 
    buttonA.gotoAndStop(2); 
} 

// and so on down the line.... 
1

ボタンの名前を数値で指定すると、より迅速かつ効率的になります。ボタン1、ボタン2、button2を...これは私はおそらく最初はかなりgetChildByNameを使用してに頼るよりも、配列内のボタンを配置するでしょうが、あなたが、簡単に

// loop through the buttons and give them mouse click listeners 
for (var i:int = 1 ; i <= 7; i++){ 
    var curButton:MovieClip = getChildByName ("button"+i); 
    // set click lisitener 
    curButton.addEventListener (MouseEvent.CLICK, buttonClickHandler); 
    // set rollover listener 
    curButton.addEventListener (MouseEvent.ROLLOVER, buttonRollOverHandler); 
    // set rollout listener 
    curButton.addEventListener (MouseEvent.ROLLOUT, buttonRollOutHandler); 

    // set initial state 
    curButton.gotoAndStop(1); 
} 

function resetStates(){ 
    for (var i = 1; i<=7; i++){ 
     var curButton = getChildByName("button"+i); 
     curButton.gotoAndStop(1); 
    } 
} 

function buttonRollOverHandler (evt:MouseEvent){ 
    resetStates(); 
    evt.target.gotoAndStop(2); 
} 
function buttonRollOutHandler (evt:MouseEvent){ 
    resetStates(); 
} 
function buttonClickHandler (evt:MouseEvent){ 
    resetStates(); 
    evt.target.gotoAndStop(3); 
} 
+1

1の機能を実行するループのために書くことができます。 – Allan

+0

@Allan @guacamoly私はあなたの助けを借りて第1部を考え出しました、ありがとうございました!今度は、ユーザーがアニメーションとやりとりするまでアニメーション全体を実行する必要があります。つまり、ユーザーが実際にスライドショーとやりとりするまで、ボタンを順番に(最初から最後まで)押すようにシミュレートする必要があります。 – erica

+0

を使用するには、setIntervalメソッドを使用します。 setIntervalを使用すると、特定の時間間隔の後に関数を呼び出すことができます。それをドキュメントで調べてください。関数が呼び出されるたびに、次のボタンの状態をトグルして他のボタンをリセットします。 ボタンをクリックしたときにアニメーションを停止させるには、buttonRollOverHandlerでclearIntervalを使用します。そして、buttonRollOutHandler内の同じアニメーション関数にsetIntervalを再起動させる – guacamoly