Flex/Flash/AS3中的Vsync?

osh*_*hko 9 apache-flex flash actionscript-3 vsync

我在2D射击游戏上工作,屏幕上有许多移动物体(子弹等).

我使用BitmapData.copyPixels(...)将整个屏幕渲染到缓冲区:BitmapData.然后我从"缓冲区""copyPixels"到屏幕:BitmapData.帧率为60.

private var bitmap:Bitmap = new Bitmap();
private var buffer:Bitmap = new Bitmap();

private function start():void {
    addChild(bitmap);
}

private function onEnterFrame():void {
    // render into "buffer"
    // copy "buffer" -> "bitmap"
}
Run Code Online (Sandbox Code Playgroud)

问题是精灵正在撕裂:精灵的某些部分水平移动.

它看起来像是关闭了VSYNC的PC游戏.

有人解决了这个问题吗?

更新:问题不是关于性能,而是关于摆脱屏幕撕裂.

[!]更新:我已经创建了另一个问题,在这里您可以尝试两种实现:使用Flash方式或BitmapData + copyPixels()

Dan*_*lho 7

我感觉到你的痛苦,因为我现在正在开发自己的游戏.在默认设置下,无论您生成什么代码,Flash渲染器都会产生可怕的屏幕撕裂/ v-sync问题.

这就是为什么我很高兴能找到最简单,最优雅的答案,那就是没有重新分解代码(这对单个位有帮助,问题是Flash播放器,而不是代码).

只需在"发布设置"中启用"硬件加速"即可.有两种不同的选择:

1级:直接 ; 和第2级:GPU.

在官方文档中阅读更多相关信息:指定SWF文件的发布设置,并确定哪种选项最适合您的游戏.

目标市场确实在这里起作用,如果它对游戏玩家来说是一个严肃的游戏,你不需要担心可能的性能问题,因为大多数游戏玩家都有GPU.

这篇文章没有具体提供我的解决方案,但引导我朝着正确的方向前进.但是,如果您的游戏将在浏览器窗口中,您可能必须使用相同的技术将wmode设置为direct或gpu.