Flex/Flash/AS3 中的垂直同步?
-
13-09-2019 - |
题
我正在开发一款 2D 射击游戏,屏幕上有很多移动物体(子弹等)。
我使用 BitmapData.copyPixels(...) 将整个屏幕渲染到缓冲区:BitmapData。然后我将像素从“缓冲区”“复制”到屏幕: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"
}
问题是精灵正在撕裂:精灵的某些部分发生了水平移动。
它看起来像是关闭了 VSYNC 的 PC 游戏。
有人解决这个问题了吗?
更新: 问题不在于性能,而在于摆脱 屏幕撕裂.
[!] 更新: 我已经创建了 另一个问题 在这里你可以尝试两种实现:使用Flash方式或BitmapData+copyPixels()
解决方案
我觉得你的痛苦,我在战壕开发自己的游戏目前是。在默认设置下,Flash渲染器产生可怕的画面撕裂/ V同步的问题,不管你生产什么代码。
这就是为什么我很高兴已经找到了最简单的,优雅的答案,这是不重因子代码(这不利于单个位,问题是Flash播放器,而不是代码)。
在您的发布设置 只启用硬件加速。有两种不同的选择:
<强>等级1:直接强>;和等级2:GPU 强>
了解更多关于它的官方文档:指定发布的设置SWF文件,并决定哪些选项是最适合你的游戏。
目标市场确实在这方面发挥的一个因素,如果是游戏玩家的严肃游戏,你不必担心可能的性能问题,因为大多数玩家有GPU的。
这文章没有向我提供解决方案,专,反而导致我在正确的方向。但是,如果你的游戏将是在浏览器窗口中,您可能需要使用设定的wmode直接或GPU以及相同的技术。
其他提示
第一件事是停止治疗的Flash Player喜欢它是DOS。 Flash播放器是一个高度优化的2D游戏引擎,因为它是和我真的不明白为什么你试图通过各地复制大量位图切片推倒重来。当然,你将有性能问题。
在Flash Player不会让你同步到任何垂直或水平的空白,因为Flash Player中根本没有这个概念,任何
我个人认为你应该重新考虑你的方法,如果你想“平滑”的动画。 Flash播放器无疑是这个能力,你只是想错误的做法。
不要的东西保存到的BitmapData,将杀,杀绝对您的应用程序。位图数据是不是很高性能的。
在Flash中所有的游戏元素,如小精灵(或影片剪辑,如果你一定要),然后闪工作是如何打算的工作,作为一个矢量动画平台。这是从来没有的2D位图图形优化。 2D矢量图形很好地工作,即使你导入位,他们将更好地工作,然后走动,他们将呈现给BitmapData对象。