2014-09-28 71 views
0

我試圖將動作腳本2.0代碼轉換爲3.0,並有麻煩。我正在使用多個按鈕,並希望每個按鈕在翻轉時停止在某個幀上,並在轉出時返回到第1幀。使用動作腳本3.0來控制按鈕滾動

在編碼方面我並不十分精通,我可以得到這個代碼爲一個按鈕工作,但是當我將它應用到另一個按鈕時,我得到錯誤,它實際上是在播放所有幀。

button_201c.addEventListener(MouseEvent.ROLL_OVER, onMouseOver); 
button_201c.addEventListener(MouseEvent.ROLL_OUT, onMouseOut); 

function onMouseOver(e:MouseEvent):void { 
    mouseEnabled = true; 
    buttonMode = true; 
    gotoAndStop(3); 
} 

function onMouseOut(e:MouseEvent):void { 
    gotoAndStop(1); 
} 

任何幫助將不勝感激!

回答

0

做到這一點的一種方法是爲通用簡單按鈕創建單個類。您將此類應用於圖書館中的動畫片段:library - > your_symbol - >rightclick - > properties - >class。然後,您可以在舞臺上拖動這些符號的許多實例,它們都可以工作。

如果您需要某些按鈕的變體(例如懸停時添加聲音),則可以擴展類並重載這些方法。這通常會導致許多小課,這就是爲什麼你應該將它們存放在按鈕包 :)

package buttons { 
    import flash.display.MovieClip; 
    import flash.events.MouseEvent; 

    public class SimpleButton extends MovieClip { 

     public function SimpleButton() { 
      addEventListener(MouseEvent.MOUSE_OVER, mOver); 
      addEventListener(MouseEvent.MOUSE_OUT, mOut); 
      addEventListener(MouseEvent.MOUSE_DOWN, mDown); 

      buttonMode = true; 
     } 
     protected function mOver(e:MouseEvent):void { 
      gotoAndStop(2); 
     } 
     protected function mOut(e:MouseEvent):void { 
      gotoAndStop(1); 
     } 
     protected function mDown(e:MouseEvent):void {} 
    } 
} 
0

在你的代碼的問題是,你的代碼是的onMouseOver的時候,就失去了它的參考到發生事件的按鈕。 要查找獲取該事件的按鈕,您可以使用e.currentTarget。

而且你不需要mouseEnabled和buttonMode - 在它到達那裏的時候,你可以確保你的按鈕被設置。

因此,代碼將

button_201c.addEventListener(MouseEvent.ROLL_OVER, onMouseOver); 
button_201c.addEventListener(MouseEvent.ROLL_OUT, onMouseOut); 

function onMouseOver(e:MouseEvent):void { 
    e.currentTarget.gotoAndStop(3); 
} 

function onMouseOut(e:MouseEvent):void { 
    e.currentTarget.gotoAndStop(1); 
} 

,甚至更短的版本將是

button_201c.addEventListener(MouseEvent.ROLL_OVER, function (e:MouseEvent) { e.currentTarget.gotoAndStop(3); }); 
button_201c.addEventListener(MouseEvent.ROLL_OUT, function (e:MouseEvent) { e.currentTarget.gotoAndStop(1); });