2010-03-26 58 views
2

我正在用ActionScript 3編寫一個紙牌遊戲。每張卡片由一個擴展從Flash CS4導出的包含卡片圖形和翻頁動畫的movieclip的類實例表示。當我想翻轉一張卡片時,我會在這個動畫片段上調用gotoAndPlay。讓系統時間決定動畫速度,而不是程序FPS

當幀頻變慢時,所有動畫花費更長時間才能完成。看起來Flash會默認動畫影片剪輯,以確保剪輯中的所有幀都將被繪製。因此,當程序幀速率低於剪輯的幀速率時,動畫將以較慢的速度播放。

我希望有一個動畫總是以相同的速度播放,因此總是會在屏幕上顯示相同的時間。如果幀速率太慢而無法顯示所有幀,則會丟棄幀。有可能告訴Flash以這種方式進行動畫製作嗎?如果不是,我自己編寫此行爲的最簡單方法是什麼?

回答

0

自從我使用Flash以來已經有一段時間了,但是據我所知,這是不可能的,因爲Flash使用基於幀的動畫模型。

然而,Silverlight使用基於時間的動畫模型,並且只會根據幀率允許繪製儘可能多的中間幀。

1

最簡單的方法是使用Timer(或setInterval)每1000/fps毫秒觸發一次,告訴MovieClip轉到下一幀。

如果你需要的東西更準確,你必須檢查自上次更新(從this article from Keith Peters' blog第一條評論,這說明了一切很好被盜)花費的時間。

0

補間班(fl.transitions.Tween)非常適合這種情況。通過將構造函數的最後一個參數設置爲TRUE,然後它將其動畫/觸發器的時間設置爲秒,並且據我所知它會補償FPS丟失/增益。

通過將新對象(Trigger(new Object(), "x")傳遞給構造函數併爲MOTION_FINISH(TweenEvent.MOTION_FINISH)創建偵聽器來觸發事件,您可以像Timer類一樣輕鬆地使用它!

我使用Tweens來處理很多事情,因爲它們很容易,快速,並且得到一切支持。正如我所說,它應該能夠解決您的FPS /滯後問題,因爲它實時調整爲FPS更改(據我所知!)。