我几乎完成了使用Adobe CS5.5 AIR 3.0 for iOS制作的游戏。我试图优化代码,因为一些性能问题。
我对编程很新,只想问一些问题。
我正在使用一个名为“GlobalVariables”的类。我使用它就像有一个“速度”,我可以到达任何地方。因此,如果即时通讯在主线上,或在类中我可以键入“GlobalVarialbes.Speed”,然后更改速度。这是处理东西的好方法吗?或者是否因为表演而变得沉重?我只是其中许多“全局变量”。
一件令人讨厌的事情是当物体移动时,我真的需要FPS为60 FPS。因为如果FPS大约是30-40,那么物体不会以相同的速度移动,并且物体彼此之间似乎很接近......这真的很烦人。我只是使用object.x + = GlobalVariables.Speed(速度可能是4)......这里有什么建议吗?
如果我使用背景,它实际上需要我很多FPS。大约7-10帧/秒。如何使背景图片减少吃性能?
一般提示可能吗?我在iOS上使用GPU模式:)
答案 0 :(得分:6)
一次列出一个。 (它至少有4个问题)
我正在使用一个名为" 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?
改变您对速度的思考方式,从每帧像素数到每秒像素数。然后每秒使用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)
Adobe的一些有用的优化提示:
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和一般游戏教程,将教你在任何系统上编写高效的游戏代码。
当我在编程的时候,我偶然发现了网站,特别是小行星教程将有助于回答这些问题。
它还将为你准备下一个版本的air3d api的空气做好准备。你将获得巨大的性能提升。那时,我可能会建议切换到starling框架 - 它使用了我将链接到你的教程中你将要阅读的所有技术,但是在幕后。
有一个很好的介绍教程谈论这个。