2013-02-15 125 views
0

我有一個KeyboardEvent開關布爾,如果是真的FR var降低-2 /幀到10的底部,如果是假的,它將+ 2 /幀升至60的頂部。它工作正常,和下來,但每當我添加「stage.frameRate = FR;」到一個ENTER_FRAME函數並播放它,它凍結了對窗口的控制。動畫仍在播放,但除非通過Ctrl-Alt-Del,否則我無法關閉它。AS3幀率變化問題

1.爲什麼會發生這種情況?

2.是否有可能改變frameRate每一幀?

3.如果是,如何?

+0

你有時間軸上的動畫嗎? – abnvp 2013-02-15 13:42:46

回答

1

嗯,我不確定在飛行中播放幀速率是一件好事。你想做什麼?也許有更好的辦法...

這是一個總的猜測,但也許當你設置幀率到階段它在背景中初始化'東西'。然後,由於每幀發生都會發生,因此它會嘗試在每幀上初始化,導致它被鎖定。


更新的答案,包括使用Timer對象的例子:

import flash.utils.Timer; 
import flash.events.TimerEvent; 

// the timer takes in milliseconds, so for 30 frames/second, you would have a frame tick at every 1000/30, or 33.333ms 
var tickSpeed:int = 1000/30; 
var frameTick:Timer = new Timer(tickSpeed, 0); 


function enterFrameListener(inputEvent:Timer):void { 
    // this method will run on every timer tick 
} 
frameTick.addEventListener(TimerEvent.TIMER, enterFrameListener); 

// can change the tick speed of the timer like so (setting it to 1000 means 1 frame tick every second) 
frameTick.delay = 1000; 

// according to the api doc however, a tickspeed of less then 20ms is not recommended 
// 20ms would be equal to 60 fps 

通過將其卸載到一個計時器,你不應該需要更動整體幀率與其他另一個優點對象可能會同時受到不同定時器的影響。定時器類也有一些有用的方法本身以及:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/Timer.html

+0

我想過慢動作。一種方法是取得舞臺上的所有代碼並逐個更改值。另一個是將所有值都基於一次會改變的變量。但是如果我需要平滑過渡,它仍然會對代碼產生巨大的影響。而改變frameRate對我來說似乎是一個很好的方式:設置更高的比率,60,並使6倍的差異達到足夠高的速度,以獲得看似平滑的動畫效果。這樣我就可以讓所有的「世界」變慢或超速,並且只需要調整可控制的符號速度。有任何想法嗎?^_ ^' – SherWood 2013-02-15 04:53:12

+0

現在非常簡單,只是我改變並顯示在文本字段中的一個值。我確定它不會「超過9000」來降低PC的速度。首先我做了它的工作,然後我在上面添加了1行。這使得它凍結而不是移動物體的動畫。他們似乎仍然以60 fps的速度前進。我在網上看到一個例子,當你按下一個改變frameRate的按鈕時,動畫改變了它的速度。他們使用了1行... Button press - > frameRate + = 1 – SherWood 2013-02-15 05:04:22

+0

嗯,是基於frame/ENTER_FRAME事件的所有動畫嗎?如果是這樣,也許你可以改變它,然後啓動計時器並控制速度。我會更新我的答案,包括一個例子。 – mitim 2013-02-15 05:07:48

0

我認爲你的應用程序凍結,因爲你試圖設置每幀的幀速率,我建議你應該檢查您的幀率在您的ENTER_FRAME部分。如果您的幀速率從您期望的幀速率上升/下降,那麼您應該將幀速率設置爲FR。

試試這可以幫助你。