优化提示? AS3 iOS AIR 3.0

时间:2011-11-08 19:57:03

标签: ios actionscript-3 optimization air

我几乎完成了使用Adobe 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模式:)

  5. 编辑请回答:我的朋友告诉我使用“很多”如果是因为,那么预先真实地看看它是否会阅读以下代码会更容易。 :)

4 个答案:

答案 0 :(得分:6)

一次列出一个。 (它至少有4个问题)

  1.   

    我正在使用一个名为" GlobalVariables"的课程。我喜欢这个       a"速度",我可以到达任何地方。所以如果我在主线上       或者,在课堂上我可以输入" GlobalVarialbes.Speed"然后改变       速度。这是处理东西的好方法吗?或者它变得沉重       为了表现这样做?我只是其中的很多       " globalvariables&#34 ;.   使用全局变量和函数调用可能需要一些时间。如果在方法中多次使用变量,则可以通过将值缓存到局部变量来略微优化。但是一定要测试结果,因为缓存对象如果它不是原始值会导致一个" 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?
    
  2. 改变您对速度的思考方式,从每帧像素数到每秒像素数。然后每秒使用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,请使用该功能。它被称为" stage3D"在闪存中,这是用闪存制作移动图形的唯一好方法。用于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对象池"

    使用Vector而不是Array。

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

    的优化技巧

答案 1 :(得分:1)

Adob​​e的一些有用的优化提示:

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

答案 2 :(得分:0)

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

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

时更新

3您是否尝试过cacheAsBitmap

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

答案 3 :(得分:0)

您已经收到了一些非常适合调整大脑如何帮助提高表现的答案。我将简单地添加一个链接到一个网站,可以帮助使这些提示具体。 * -bit火箭,如果你没有那里有一个最好的blitting和一般游戏教程,将教你在任何系统上编写高效的游戏代码。

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

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

它还将为你准备下一个版本的air3d api的空气做好准备。你将获得巨大的性能提升。那时,我可能会建议切换到starling框架 - 它使用了我将链接到你的教程中你将要阅读的所有技术,但是在幕后。

http://www.gotoandlearn.com/

有一个很好的介绍教程谈论这个。