2013-12-09 61 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; 
    } 
}