1

ライブラリに一連のメニュー コントロールを含むムービークリップがあります。各コントロールには、ロールオーバー、ロールアウト、およびクリックで実行される一連のアクションと、常に設定する必要があるいくつかのプロパティ (buttonMode、mouseChildren) があります。

私のクラスでは、各ボタンのイベント リスナーを選択する代わりに、一連のイベント リスナーとプロパティをすべてのクリップに適用する方法はありますか? これらはメニュー内のさまざまなレベルと場所にありますが、アクションはすべて同じです: gotoAndPlay("over")"、buttonMode = true など。

私のクラスの設定方法は次のとおりです。

package {

  import flash.display.*;
    import flash.events.*; 
    import com.greensock.*;
    import com.greensock.easing.*;

  public class Main extends MovieClip {

    public var menuInstance:PanoMenu;
    private var menuTopRef;

    public function Main() {
        menuInstance = new PanoMenu();
        menuInstance.x = -43;
        menuInstance.y = 23;
        menuTopRef = menuInstance.menuTop;
        menuTopRef.buttonMode = true; 
        menuTopRef.addEventListener(MouseEvent.CLICK,menuTopClick); //MH - want to do this for all clips in the menu, with their own unique callbacks specified
        addChild(menuInstance);
        trace ("main");
    }

    private function menuTopClick(e:MouseEvent){
        trace ("top click");
    }

  }
}
4

2 に答える 2

1

Reshape Media の答えは Click イベントを処理するための良い方法ですが、ボタンの動作はおそらく Class を作成し、それをすべてのボタン風の MovieClip に適用することで処理する必要があります。または、古い学校の方法は、追加のコードなしでほとんど希望どおりに機能するボタン シンボル (SimpleButton のインスタンスになります) を作成することです。

于 2013-01-25T01:34:45.473 に答える
0

状況に応じて、別のハンドラーは必要ありません。あなたができることは、すべてのボタン(メニュー内)から単一のハンドラーにすべてのイベントを送信し、スイッチケースを実行してボタンの名前を確認し、そこから移動することです。

//random menu items
var menu_item_1:Sprite = new Sprite;
var menu_item_2:Sprite = new Sprite;
var menu_item_3:Sprite = new Sprite;

//give them unique names
menu_item_1.name = 'item 1';
menu_item_2.name = 'item 2';
menu_item_3.name = 'item 3';

//define an array and add the SAME listener         
var menu_items:Array = [menu_item_1,menu_item_2,menu_item_3];
for(var i:Number = 0; i<menu_items.length; i++){
    var item:Sprite = menu_items[i] as Sprite;
    item.addEventListener(MouseEvent.CLICK,onClick);
}

//listen for all button clicks
//do a switch case to map the clicks
function onClick(e:MouseEvent):void{

    switch(e.target.name){

        case 'item 1':
            //do something
            break;

        case 'item 2':
            //do something
            break;  

        case 'item 2':
            //do something
            break;  
    }

}
于 2013-01-24T20:30:49.613 に答える