我有一个切换布尔值的 KeyboardEvent,如果为 true,则 FR var 将 -2/帧降至 10 的底部,如果为 false,则将 +2/帧升至 60 的顶部。它上下工作正常,但每当我添加“ stage.frameRate = FR;" 到 ENTER_FRAME 函数并播放它,它会冻结对窗口的控制。动画仍在播放,但我无法将其关闭,除非通过 Ctrl-Alt-Del。
1.为什么会这样?
2.是否可以每帧更改frameRate?
3.如果是,怎么做?
我有一个切换布尔值的 KeyboardEvent,如果为 true,则 FR var 将 -2/帧降至 10 的底部,如果为 false,则将 +2/帧升至 60 的顶部。它上下工作正常,但每当我添加“ stage.frameRate = FR;" 到 ENTER_FRAME 函数并播放它,它会冻结对窗口的控制。动画仍在播放,但我无法将其关闭,除非通过 Ctrl-Alt-Del。
1.为什么会这样?
2.是否可以每帧更改frameRate?
3.如果是,怎么做?
嗯,我不确定即时播放帧速率是否是一件好事。你想做什么?也许有更好的方法...
这是一个完全的猜测,但也许当您将帧速率设置为阶段时,它会在后台初始化“某些东西”。然后,由于您在每一帧都发生了它,它会尝试在每一帧上进行初始化,导致它被锁定。
更新答案以包含使用 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
通过将其卸载到计时器,您不需要弄乱整体帧速率,其他对象的另一个优点可以同时受到不同计时器的影响。Timer 类本身也有一些有用的方法:http: //help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/Timer.html
我认为您的应用程序正在冻结,因为您试图在每一帧上设置帧速率,我建议您应该在您的ENTER_FRAME
部分中检查您的帧速率。如果您的帧速率从您想要的帧速率上升/下降,那么您应该将帧速率设置为 FR。
试试这个可以帮助你。