我的库中有一个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");
}
}
}
答案 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;
}
}