問題可能是你更改延遲屬性Timer類每次重啓的結果。
從Adobe的文檔:
如果設置在定時器運行延遲時間,計時器會重新啓動相同的repeatCount迭代。
http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/utils/Timer.html#delay
這基本上意味着重新啓動定時器0,但是記住它已經重複了多少遍。我意識到我的答案越來越長,所以我在底部提供了一些參考。
解決方案:使用flash.utils.getTimer()而不是Timer對象。
http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/utils/package.html#getTimer()
的getTimer()函數返回表示自啓動.swf文件的已經過去的毫秒數的整數。如果您每幀檢查一次該數字,您可以看到自上一幀以來經過了多長時間。只需添加每幀通過的毫秒數,直到該數字達到閾值,然後調用畫線功能並重置計數器。
當檢查,看看是否按下鍵減少你的新「myDelay」變量而不是一個Timer.delay屬性的。
var ms:int;
var timeStamp:int = flash.utils.getTimer();
var myDelay:Number;
onEnterFrame() {
// Track how much time has passed since the last frame
ms += flash.utils.getTimer() - timeStamp;
if (ms > myDelay)
{
// DRAW THE ROAD LINES
drawLines();
// RESET THE COUNTER
ms = 0;
}
//other stuff
// Record the timestamp of this frame so you can see the difference next frame
timeStamp = flash.utils.getTimer();
}
說明TIMER復位的:
注:我假設你是每秒檢查按鍵。如果要更改計時器的每一幀(例如24次),延遲性,你的計時器發生了超過很少一24次,它就會發出一個事件來調用它的處理器的機會之前,將被重置函數來創建線條。
如果你看看下面的例子,啓動和停止事件是防止它被重置的唯一方法,但即使如此,只有當延遲小於時間時纔會調用定時器事件處理函數在延遲的變化之間。由於平均swf是24fps,這意味着在下一幀再次改變值之前,延遲需要小於41.6毫秒。
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.events.TimerEvent;
import flash.utils.Timer;
/**
* ...
* @author
*/
public class Main extends Sprite
{
var timer:Timer;
var keyPressed:Boolean = false;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
timer = new Timer(50);
timer.addEventListener(TimerEvent.TIMER, function():void { trace (timer.delay); });
timer.start();
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUp);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
function onEnterFrame (e:Event)
{
if (keyPressed)
{
timer.stop();
timer.delay -= 1;
timer.start();
}
}
function keyDown (e:KeyboardEvent):void { keyPressed = true; }
function keyUp (e:KeyboardEvent):void { keyPressed = false; }
}
}
請張貼更多的代碼,這是不夠的代碼推測什麼的。 – 2011-07-07 01:17:37