我有一个可以切换布尔值的KeyboardEvent,如果为真,FR var会将-2 /帧下降到10的底部,如果为false,它会上升+ 2 /帧到60的顶部。它可以正常上下移动但是每当我添加“stage.frameRate = FR;”到一个ENTER_FRAME函数并播放它,它冻结了对窗口的控制。动画仍在播放,但除非通过Ctrl-Alt-Del,否则我无法将其关闭。
1.为什么会发生这种情况?
2.是否可以每帧更改frameRate?
3.如果是,怎么样?
答案 0 :(得分: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
通过将其卸载到计时器,您不需要弄乱整体帧速率,而其他对象的另一个优点可能会同时受到不同计时器的影响。 Timer类本身也有一些有用的方法:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/Timer.html
答案 1 :(得分:0)
我认为您的应用程序因为您尝试在每个帧上设置帧速率而冻结,我建议您检查ENTER_FRAME
部分中的帧速率。如果您的帧速率从您想要的帧速率上升/下降,那么您应该将帧速率设置为FR。
试试这可以帮到你。