flash as3 - 为一组动画片段分配一组事件处理程序

时间:2013-01-24 19:59:03

标签: actionscript-3 flash class addeventlistener

我的库中有一个movieclip,其中包含一组菜单控件。每个控件都有一系列操作,它们将在翻转,转出和点击时执行,还有一些应该始终设置的属性(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");
    }

  }
}

2 个答案:

答案 0 :(得分:1)

虽然Reshape Media的答案是处理Click事件的好方法,但按钮行为可能应该通过创建一个Class并将其应用于所有按钮的MovieClip来处理。或者,旧学校的方法是只创建一个按钮符号(这将是SimpleButton的一个实例),它几乎可以像您想要的那样工作,而无需任何额外的代码。

答案 1 :(得分: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;  
    }

}