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 事件的好方法,但按钮行为可能应该通过创建一个类并将其应用于所有按钮式 MovieClip 来处理。或者,老派的方法是只制作一个按钮符号(它将是 SimpleButton 的一个实例),它几乎可以像您想要的那样工作,而无需任何额外的代码。

于 2013-01-25T01:34:45.473 回答
0

根据您的情况,您不需要不同的处理程序。您可以做的是将所有按钮(在菜单中)的所有事件发送到单个处理程序,然后执行 switch case 以检查按钮的名称并从那里开始。

//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 回答