有2 种不同的FPS:
- 用于精灵更新的背景 FPS
- 以 CPU 允许的速度运行
- 或多或少恒定 60 FPS(廉价的精灵更新)
- 显示 FPS(使用 Fraps 可见)
- 当精灵四处移动时上升到 60
- 当没有精灵移动时下降到 0
我想让显示 FPS 保持在 60 FPS。如果 Adobe 无法更改我需要知道或...
如何使显示 FPS 保持在 60 ?
消除误解: Fraps 钩住了 WinApi 函数SwapBuffers
。因此,每次游戏窗口通过交换缓冲区显示新的渲染场景时,Fraps 都有机会复制缓冲区内容并在其上放置一些 FPS 计数器。Flash 经过优化以节省 GPU 时间。当没有任何变化时,没有任何内容被绘制到另一个缓冲区并且不执行缓冲区交换。其实这是一件好事。但我仍然想知道是否可以禁用此优化。我不是要禁用 vsync,而是要使 GPU FPS 与 CPU FPS 相等。
这就是我更新的方式:
public class Main extends MovieClip
{
public function Main()
{
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(event: Event): void
{
//updateSprites();
}
}
例子:
import flash.display.MovieClip;
import flash.events.Event;
[SWF(frameRate="60",backgroundColor="0xffffff",width="960",height="540")]
public class SimpleSprite extends MovieClip
{
public function SimpleSprite()
{
for (var i: int = 0; i < 32; i++)
{
var angle: Number = 2 * Math.PI * Math.random();
var color: uint = 0x1000000 * Math.random();
var length: Number = 1024;
graphics.lineStyle(2, color);
graphics.moveTo(-Math.sin(angle) * length, -Math.cos(angle) * length);
graphics.lineTo(Math.sin(angle) * length, Math.cos(angle) * length);
}
x = stage.stageWidth / 2;
y = stage.stageHeight / 2;
stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(event: Event): void
{
rotation += 0.002;
}
}