【问题标题】:Optimization tips? AS3 iOS AIR 3.0优化提示? AS3 iOS 空气 3.0
【发布时间】:2011-11-08 19:57:02
【问题描述】:

我用 Adob​​e CS5.5 AIR 3.0 for iOS 制作的游戏快完成了。由于一些性能问题,我试图优化代码。

我对编程有点陌生,只是想问一些问题。

  1. 我正在使用一个名为“GlobalVariables”的类。我使用它就像有一个“速度”,我可以到达任何地方。因此,如果我在主线上,或者在课堂上,我可以输入“GlobalVarialbes.Speed”,然后更改速度。这是处理东西的好方法吗?或者表演会变得很重吗?我只是其中的许多“全局变量”。

  2. 一件非常烦人的事情是,当物体移动时,我真的需要 FPS 为 60 FPS。因为如果 FPS 大约在 30-40 左右,物体不会以相同的速度移动,而且物体之间似乎更接近了……这真的很烦人。我只是使用 object.x += GlobalVariables.Speed (速度可能是 4)...这里有什么建议吗?

  3. 如果我使用背景,它实际上会占用我大量的 FPS。大约 7-10 帧/秒。我怎样才能使背景图片少吃表演?

  4. 一般提示可能吗?我在 iOS 设备上使用 GPU 模式:)

编辑请回答这个问题:我的朋友告诉我使用“大量”的 if 是因为,那么 preforance 更容易实际查看它是否会阅读以下代码。 :)

【问题讨论】:

    标签: ios actionscript-3 optimization air


    【解决方案1】:

    逐个浏览您的列表。 (至少真的是 4 个问题)

    1. 我正在使用一个名为“GlobalVariables”的类。我用这个就像有 一个“速度”,我可以到达任何地方。所以如果我在主线上 或者,在一个类中我可以输入“GlobalVarialbes.Speed”然后改变 速度。这是处理东西的好方法吗?或者它变得沉重 为了表演做到这一点?我只是其中的很多 “全局变量”。 使用全局变量和函数调用可能需要一些时间。如果您在一个方法中多次使用该变量,则可以通过将该值缓存到局部变量来稍微优化。但一定要测试结果,因为如果对象不是原始值,缓存对象会导致调用“new Something()”构造函数,这非常慢。

      One REALLY annoying thing is that when objects move, I really need
      the FPS to be 60 FPS. Because if the FPS is around 30-40, the
      objects doesnt move at the same speed, and the objects seems to be
      alot closer the each other to... This is really annoying. I just use
      object.x += GlobalVariables.Speed (Speed is maybe 4)... Any
      suggestions here?
      

    改变您对速度的看法,从每帧像素到每秒像素。然后每秒使用 getTimer() 来找出自最后一个渲染帧以来已经过去了多少秒。我在这个线程中放了一些示例代码:Frame skipping on Flash

    If I use a background it actually takes alot of the FPS from me.
    Around 7-10 fps. How can I make a background picture less
    preformance eating?
    

    背景和绘图通常是昂贵的操作。如果背景不滚动,请使用 cacheAsBitmap。如果可能,请确保背景不包含子图层。使用位图而不是矢量。并使其尽可能小——不要在屏幕外留下多余的部分。另外 - 确保背景没有被缩放。也关闭位图平滑。尝试将舞台质量设置为 StageQuality.LOW 或 StageQuality.Medium,看看是否有帮助。 ==更新== 现在 AIR 3.2 已经发布,它支持 iOS 和 android 上的 OpenGL,请使用该功能。它在 Flash 中称为“stage3D”,它确实是使用 Flash 为移动设备制作图形的唯一好方法。对于 2D 图形,starling 框架。 http://gamua.com/starling/ 与 Facebook 上愤怒的小鸟使用的引擎相同。因此,它的实际测试和生产准备就绪。 (及其开源!)

    General tips maybe? I use the GPU mode on the iOS devies :)
    

    一般提示:对所有内容都使用位图。尽可能避免透明。不要使用滤镜或混合模式。避免 Alpha 补间。避免创建新对象——回收常用对象,尤其是展示对象。请记住,添加和删除子代也很昂贵。如果您在可重复使用的子弹池中有一堆子弹,您可以将它们设置为 visible=false。然后 visible=true 当您重新初始化该项目符号对象时。尝试搜索“AS3 对象池”

    使用向量代替数组。

    最后:测试和重新测试。测量每个函数调用的时间。优化 Flash 是一个深刻而丰富的话题——它永远不会枯竭。部分原因是您的里程会因项目而异。这是一个很好的链接,可帮助您开始学习 AS3 的优化技术http://drawlogic.com/2009/05/22/as3-flash-efficient-code-techniques-vectors-in-flash-10-faster-jpeg-encoding-other-optimization-notes/

    【讨论】:

    • “改变你对速度的看法,从每帧像素到每秒像素。”顺便说一句,我理解对了吗?我应该使用计时器并告诉它应该移动多少而不是使用每帧应该移动多少像素?
    • 看看我链接到的代码示例(跳帧链接)。您使用 on EnterFrame 事件来找出自上一帧以来已经过去了多少时间。然后,一旦您知道过去了多少时间,您就可以移动适当的数量。
    【解决方案2】:

    Adobe 提供的一些有用的优化技巧:

    http://www.adobe.com/devnet/flash/articles/optimize_content_ios.html

    【讨论】:

      【解决方案3】:

      1 对象作为引用传递,因此在一个类中对该对象的更改将反映该对象传递到的任何位置。如果您希望类可全局访问,您也可以研究单例模式。最后一个建议是使用 config.as 使用 CONST 声明,只需在需要数据时实例化它的新实例

      2 这是使用 enterFrame 事件的缺点。将此更改为计时器并摆脱enterframe。此外,如果您有繁重的数据操作,会以帧速率多次更改显示对象,您可能需要查看 UIComponent 并研究失效方法。这将允许显示仅在重绘(帧率)时更新

      3 你有没有尝试过缓存AsBitmap

      4 我不确定实际使用了多少 GPU,因为它仍然很新。

      【讨论】:

        【解决方案4】:

        您已经收到了一些非常适合调整大脑工作方式以帮助提高表现的答案。我将简单地添加一个指向可以帮助使这些提示具体化的站点的链接。 *-bit rocket,如果您没有去过那里,这里有最好的 blitting 和通用游戏教程之一,它将教您在任何系统上编写高效的游戏代码。

        当我在你现在从事编程的时候,我偶然发现了这个网站,特别是小行星教程将有助于回答这些问题。

        http://www.8bitrocket.com/2008/1/20/Tutorial-Using-Flash-CS3-and-Actionscript-3-to-create-Atari-7800-Asteroids-Part-1/

        它还可以让您为下一个内置 stage3d api 的 air 版本做好准备。您将获得巨大的性能提升。到那时,我可能会建议切换到 Starling 框架——它使用了你将在我链接到的教程中读到的所有技术,但在幕后。

        http://www.gotoandlearn.com/

        有一个体面的介绍教程谈论这个。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-12
          相关资源
          最近更新 更多