gpt4 book ai didi

游戏开发的 Flash 性能 : native render VS BitmapData framebuffer

转载 作者:行者123 更新时间:2023-12-03 12:17:56 25 4
gpt4 key购买 nike

我开发了一个包含大量对象和激进滚动的 2D 射击游戏。

问题:哪种方式更好?

选择 1 - 使用原生 Flash 渲染:

  • 从 Bitmap 派生游戏对象,使用现有的 x、y、width、height、bitmapData
  • 将所有对象作为子 UIComponent.addChild(...) 添加到屏幕
  • 使用“scrollRect”剪辑可见区域

  • CHOICE 2 - 使用“bitmap + copyPixels”编写自定义渲染
  • 使用自己的游戏对象与 x, y, width, height, bitmapData
  • 将位图添加到屏幕,从中获取位图数据
  • 重绘每个 ENTER_FRAME:bitmapData.lock(),遍历游戏对象和 copyPixels() 到 bitmapData,然后 bitmapData.unlock()
  • 自定义剪辑:不渲染屏幕对象

  • 在此 question有些人提示“bitmap + copyPixels()”很慢。

    实验:我已经实现了这两种技术:
  • main_1.swf - 原生
  • main_2.swf - 定制

  • 请尝试一下,看看哪个更好(更快、更流畅、消耗更少的 CPU)。

    等到至少有 250 个敌人(屏幕上方的计数器)。
    更新:尝试打开任务管理器(或 $top)并查看整体 CPU 使用情况

    更新 2:我已经更改了代码,现在小兵的生成速度要快得多。

    最佳答案

    更新:感谢高压力版本。再一次,我真的看不出只是跑来跑去有什么不同。但是我巧妙地发现“r”会掉落炮塔,而当我掉落20-30个炮塔时,原生版本比手动版本要慢一些,所以也许我错了。 (我发现内存使用没有任何差异。)似乎在本地做事情应该有更快的潜力,但很可能需要专门处理一些不透明的排序。

    由于这已被接受,我将添加一条注释以明确我在对不同答案的评论中所说的话:如果您的所有 Assets 本身都是位图,那么正如 HanClinto 指出的那样,发现手动合成它们比制作 native 对象并让 Flash 完成工作,因为它消除了与显示对象相关的开销,例如事件结构。

    然而,在某些情况下,手动操作可能会胜出,例如,如果您有需要渲染为位图的矢量内容,或大量动画 Sprite ,或者如果您需要检测 Actor 上的鼠标事件(您会如果您自己进行合成,则需要手动进行,也许会很痛苦)。

    因此,如果您不需要做任何会减慢手动合成速度的事情,它似乎绝对是最好的答案,如果您这样做,那么尝试这两种方法是绝对确定的最佳方法。 (混合模型也是可能的,您可以在其中制作一层需要鼠标事件的 native 对象,并用一层手动合成的位图覆盖或覆盖它。)

    关于游戏开发的 Flash 性能 : native render VS BitmapData framebuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1018074/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com