2011-11-15 58 views
1

我試圖創建一個函數(由一個mouseover事件調用),它將在鼠標懸停在實例上時向後播放電影,並在不是時停止。While循環在ActionScript 3.0中不起作用

這是我到目前爲止有:

var b2:rightButton = new rightButton(); //new instance 
b2.X = 550; //instances position 
addChild(b2); //add instance to stage 
b2.alpha = .4; // set instances alpha 
var num = 0; // new variable called 'num' 
b2.addEventListener(MouseEvent.ROLL_OVER, rightScroll); //mouse event for roll over 

function rightScroll(event:MouseEvent) { //the function 
    num = 1; //set num to 1 
    b2.alpha = .8; //set alpha to 80% 
} 

b2.addEventListener(MouseEvent.ROLL_OUT, no_rightScroll); //event for roll out 

function no_rightScroll(event:MouseEvent){ //roll- out function 
    num = 0; //set num back to 0 
    b2.alpha = .4; //set alpha back to 40% 
} 

while (num == 1){ // while num =1 (while mouse is over) 
    prevFrame(); //goto previous frame 
} 

有誰知道如何解決這個問題,或者更好的方式來做到這一點?

+0

這是封裝在一個類中,還是它是一個框架腳本?如果它是一個framescript,你可能會遇到嚴重的範圍問題。 –

+0

我沒有在這裏看到任何範圍問題,但使用任何類型的動畫循環是一個壞主意。 – shanethehat

回答

4

您的代碼目前存在的問題是,循環不會與您的影片的幀率一致執行,因此您的代碼會在單個幀中多次調用prevFrame()。這會導致無限循環,這會導致程序崩潰,並且在動畫方面完全沒有用處。

最好的方法是偵聽電影的ENTER_FRAME事件,並在每次分派事件時將播放頭移回一幀。通過在你的按鈕操作中添加和刪除監聽器,你將得到你正在尋找的效果:

var b2:rightButton = new rightButton(); //new instance 
b2.X = 550; //instances position 
addChild(b2); //add instance to stage 
b2.alpha = .4; // set instances alpha 

b2.addEventListener(MouseEvent.ROLL_OVER, rightScroll); //mouse event for roll over 
function rightScroll(event:MouseEvent):void { //the function 
    stage.addEventListener(Event.ENTER_FRAME,moveBackwards); //add stage listener 
    b2.alpha = .8; //set alpha to 80% 
} 

b2.addEventListener(MouseEvent.ROLL_OUT, no_rightScroll); //event for roll out 
function no_rightScroll(event:MouseEvent):void { //roll- out function 
    stage.removeEventListener(Event.ENTER_FRAME,moveBackwards); //remove stage listener 
    b2.alpha = .4; //set alpha back to 40% 
} 

function moveBackwards(evt:Event):void { 
    prevFrame(); 
} 
+0

你可以請發表完整的語法嗎?無論如何回答問題:D –

+0

完整語法是什麼意思?我目前正在使用手機,因此無法輕鬆編輯代碼,但如果您告訴我您需要什麼,我會稍後更新答案。 – shanethehat

+0

只是完整的代碼(如如何添加幀輸入事件),如果你可以。請。 –

2

如果您使用Greensock TweenLite庫,您可能會發現編寫和讀取更容易。 Tweenlite可以像其他數值一樣容易地調整幀。

內,您的事件偵聽器,你可以添加以下:

TweenLite.to(targetMC, 1, { frame:1, ease:fl.transitions.easing.None.easeNone }); 

它將補間的影片剪輯(targetMC在這個例子中)與1秒的持續時間線性1幀。你也可以使用任何其他Tweenlite參數來玩耍它。