2013-12-09 31 views
0

我有我的主要.fla命名btn1-btn7舞台上的几个影片剪辑将充当按钮。我有一个名为Functions.as的类文件,其中单击按钮时会创建事件侦听器。 onButtonClicked只是在时间轴上的一帧。创建一个电影剪辑向量数组AS3

obj.addEventListener(MouseEvent.CLICK, onButtonClicked); 

我希望能够同时设置所有按钮的buttonMode,visibility等。我一直在研究这几个小时,并且找不到任何解决方案。我现在正在考虑将它们添加到矢量中(这对我来说是一个新概念),但我不确定如何正确执行此操作。这是我迄今为止所拥有的。

public var buttons:Vector.<MovieClip > = new Vector.<MovieClip >(); 


     function addButtons() 
     { 
      buttons.push(btn1,btn2,btn3,btn4,btn5,btn6,btn7); 

      for (var i:int; i<buttons.length; i++) 
      { 
       trace(buttons[i].name); 
      } 


     } 

我该怎么办,例如,将事件侦听器添加到所有对象?我也将设置buttonMode为true,并使它们全部不可见。我甚至不知道是否有可能做到这一点。提前感谢您的任何建议。

回答

0

我要asume您使用时间轴代码,并且已经放置在舞台上的按钮实例。因此,首先,创建载体:

var _btns:Vector.<MovieClip> = new Vector.<MovieClip>; 
_btns.push(btn1,btn2,btn43....) //add all the buttons 

比,你可以初始化所有按钮的属性:

var _mc:MovieClip;//helper var 
for(var i:int=0,i<_btns.length;i++) 
{ 
    _mc = _btns[i]; 
    _mc.visible = false; 
    _mc.buttonMode = true; 
    _mc.addEventListener(MouseEvent.CLICK, onClick); 
} 

然后,事件处理程序:

function onClick(e:MouseEvent):void 
{ 
    for(var i:int=0,i<_btns.length;i++)//reset all the buttons 
    { 
    _btns[i].visible = false; 
    } 

    _mc = MovieClip(e.eventTarget); 
    _mc.visible = true; //make visible the clicked one 
} 
+0

太谢谢你了帮助我解决这个问题。它现在功能正常。 – brianh

0

你只需要在你的示例代码中使用.name属性来做你正在做的事情。你需要循环你的数组中的每一个按钮(或向量,如果你愿意的话)。下面是一个例子如何设置buttonMode的属性:

function setButtonMode(b:Boolean):void { 
    for(var i:int=0; i<buttons.length; i++) { 
     var btn:MovieClip = buttons[i]; //store the current reference in a var for faster access 
     btn.buttonMode = b; 
     btn.mouseChildren = !b; 
    } 
}