AS3 帧率变化问题

Posted

技术标签:

【中文标题】AS3 帧率变化问题【英文标题】:AS3 framerate change issue 【发布时间】:2013-01-30 23:08:07 【问题描述】:

我有一个切换布尔值的 KeyboardEvent,如果为真,则 FR var 将 -2/帧降至 10 的底部,如果为假,则将 +2/帧上升至 60 的顶部。它上下工作正常,但无论何时我添加“stage.frameRate = FR;”到 ENTER_FRAME 函数并播放它,它会冻结对窗口的控制。动画仍在播放,但我无法将其关闭,除非通过 Ctrl-Alt-Del。

1.为什么会这样?

2.是否可以每帧改变frameRate?

3.如果是,如何?

【问题讨论】:

时间轴上有动画吗? 【参考方案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

【讨论】:

我想到了慢动作。一种方法是获取阶段中的所有代码并一一更改值。另一种方法是将所有值基于将一次全部更改的变量。但如果我需要平稳过渡,仍然需要大量添加代码。改变 frameRate 对我来说似乎是一个好方法:设置一个更高的速率,60,并将 6 倍的差异设置为足够高的速率,以获得看似流畅的动画。这样我就可以让所有“世界”减速或加速,并且只需要调整可控符号速度。有任何想法吗? ^_^' 现在它非常简单,只是我更改并显示在文本字段中的值。我确保降低 PC 速度不会“超过 9000”。首先我让它工作,然后我在上面添加了 1 行。这使它冻结但不是移动物体的动画。它们似乎仍然以 60 fps 的速度运行。我在网上看到一个例子,当你按下按钮改变 frameRate 时,动画改变了它的速度。他们也使用了 1 行... Button press -> frameRate += 1 嗯,你所有的动画都是基于 frame/ENTER_FRAME 事件的吗?如果是这样,也许您可​​以将其更改为在计时器上触发并控制其速度。我将更新我的答案以包含一个示例。 +1 建议使用计时器而不是帧速率解决方案。 你这个天才!谢谢! =D 不考虑非直接帧速率一定是我很傻。嗯,今天学到了一些新东西^_^【参考方案2】:

我认为您的应用卡住了,因为您尝试设置每一帧的帧速率,我建议您在 ENTER_FRAME 部分检查您的帧速率。如果您的帧速率从您想要的帧速率上升/下降,那么您应该将帧速率设置为 FR。

试试这个对你有帮助。

【讨论】:

以上是关于AS3 帧率变化问题的主要内容,如果未能解决你的问题,请参考以下文章

Martrix源码分析系列-如何监控帧率变化

限制 Sprite 套件帧率

如何在 PyQTgraph 中显示帧率?

AS3:一个非系统的 XML 加载错误

AS3:如何开始创建游戏的教程

switch对电视要求高吗?配啥电视比较好?