2013-03-04 219 views
0

我的目標是通過可點擊的控件(慢/中/快)來更改我的單個(循環)影片剪輯的幀速率。我聽說不可能通過as3/flash單獨實現這一點,所以我嘗試了綠色環保的TweenMax ......但我似乎無法弄清楚如何做到這一點。有沒有人可以幫忙?用TweenMax更改單獨的動畫片段的幀速率

box1.addEventListener(MouseEvent.MOUSE_DOWN, box1down); 
function box1down(event:MouseEvent):void { 

//FRAMERATE CODE HERE 

} 

非常感謝!

回答

2

這裏是TweenMax的API文檔:http://www.greensock.com/as/docs/tween/com/greensock/TweenMax.html

如果您有試圖控制多個影片剪輯,你可以創建你想要的功能的抽象類和擴展類。因此,像:

public class ControlledMovieClip extends MovieClip { 

    public function ControlledMovieClip() { 
     stop(); 
    } 

    public function animate(frameRateInSeconds:Number):void {    
     TweenMax.to(this, frameRateInSeconds, { frame: this.totalFrames - 1, repeat: -1, ease: Linear.easeNone }); 
    } 
} 

讓所有的影片剪輯被循環擴展這個類,然後你可以調用對象的動畫功能,在您的box1down事件處理程序。

我還沒有測試過這個代碼,因此在每次迭代結束時你可能需要一個gotoAndStop(1)

+0

感謝您的幫助:)我想我有更多的學習要做,這仍然是我很難理解的難!我非常感謝幫助,雖然... – Dan434 2013-03-04 21:09:13

+0

GOT IT ...謝謝你,好主意。 – Dan434 2013-03-05 00:16:48

1

它可以通過Actionscript單獨它只需要你自己處理幀的進展(而不是使用mc.play()你停止movieclip並自己調用nextFrame())。

可以說Movieclip(myMC)有20幀動畫。要以正常速度手動運行動畫,只需在項目的每個幀上調用myMC.nextFrame();(例如,使用ENTER_FRAME偵聽器)。

要讓動畫運行速度的一半,您可以使用幀計數和幀觸發:

var frameTick = 0; 
var frameAnimTrigger = 2; 

function Update(e:Event):void 
{ 
    frameTick++; 
    if(frameTick == frameAnimTrigger) 
    { 
    myMC.nextFrame(); 
    frameTick = 0; 
    } 
} 

因爲nextFrame只叫每隔一幀動畫將在半速運行。

+0

感謝您的支持。雖然我不確定我完全理解。這是否意味着它會跳過幀,造成它以一半速度運行的錯覺? – Dan434 2013-03-04 18:08:55

+1

不,它不會跳過幀。每個單幀都會調用一個基本的'ENTER_FRAME'監聽器,所以每一幀調用movieclips'nextFrame()'函數就相當於調用'play()',它將以正常速度運行。如果您每隔一幀調用'nextFrame()',如上所述,它仍然會播放動畫片段的每一幀,但是當發生「ENTER_FRAME」時,它不會進入動畫片段的下一幀,而只會每進行一次「ENTER_FRAME」 '發生。 – 2013-03-05 09:54:31

+0

哦,明白了。感謝解釋:) – Dan434 2013-03-05 23:29:55