AndEngine游戏的优化

问题描述:

我在我的游戏中使用java + AndEngine。AndEngine游戏的优化

在游戏过程中我有一些结冰,我寻找的信息,并发现了一些步骤,如何优化游戏性能:

  1. 避免GC(垃圾收集器)是 称为在游戏中的主要作用: a)在游戏时不要创建物体;
    b)不要创建不必要的对象;
  2. 是重复优化代码非常 经常

我遵循这些步骤,但从来没有少我在游戏过程中有一定的冻结。

现在我在游戏开始之前创建并加载所有纹理,并且不会卸载它们,这不是一个好主意吗?我怎样才能优化游戏过程? 也许我必须在主要活动之前释放所有可能的记忆,然后在每个关卡之后重新加载它们。

+2

什么是精灵? – 2011-05-28 17:05:27

+0

嗯..真的,我现在不删除它们,我想我必须在游戏活动前卸载所有unusefull stuf – dilix 2011-05-28 20:09:50

  1. 降低纹理尺寸。
  2. 降低质地交换机(又名尝试使用spritesheets,使纹理需要改变尽可能少)
  3. 使用低质量的纹理(RGBA4444或RGB565,而不是RGBA8888)..
  4. 呼叫setIgnoreUpdate其中实体不需要更新。
  5. Use SpriteBatches if possible

FYI: AndEngine的下一个版本,所以你有很多更多的可能性,以改善与自定义着色器和实体的业绩(未来12月中旬)体育GLES2。

此外,它将在UI线程(直接在onCreate)上执行GL线程的第一帧上的启动管道(onLoadEngine/onLoadResources/onLoadScene/onLoadComplete),而不是阻塞。

此外,它还允许您轻松地将流水线的各个阶段卸载到线程中,而不会整体破坏流水线。将会有一个非常简单的实现BaseGameActivity的子类,在执行管道的阶段时显示确定的ProgressDialog。实体将随着它们附着到场景中而弹出。

一般来说,这意味着实际的加载时间会减少,更重要的是,感觉加载时间会显着减少!创建加载屏幕非常简单,与之前的痛苦不同。

+4

正如我的文章所引用的,这里是关于12月份GLES2发布的信息:http://www.andengine.org/forums/announces/andengine-gles2-pre-release-on-december-23rd-t6097.html – 2012-01-05 16:09:42

+0

任何加快显示TMX地图的机会? TMXLayer.draw()分别绘制每个图块。任何将多个TMX切片放入单个顶点缓冲区并一次绘制它们的机会? – Yar 2012-07-21 18:35:39

我使用的方法是在关卡开始之前加载所有需要的纹理。当您进入下一级时,您应该只卸载下一级不需要的对象的纹理。其他人,如记分牌或主背景不应加载。当然,您需要卸载活动onStop中的所有纹理。 的确如此,首先您应该优化循环代码,例如,您不应该在循环期间访问任何资源,在开始循环之前尝试获取所有资源。

您可能需要发布一些关于您的游戏的更具体的信息,但一个建议是确保您重新使用精灵和对象。例如,如果您的游戏中有任何重复生成的对象(随机飞行的敌人,子弹,重复的背景元素),请尝试一次考虑屏幕上需要的对象的最大数量,然后创建多个对象在游戏开始之前,根据需要加载和重置它们。

例如我的游戏使用“随机”从屏幕顶部飞入的敌人。起初,我每次打电话都会造成一个新的敌人,但是现在我有一个ArrayList,它总共只包含6个敌人,每个敌人可以重复使用并移动数百次。这给我带来了巨大的性能提升,尤其是在较长的游戏时间段。这与GC优化有关,但您之前可能没有关于优化的内容。

+5

对象的重用通常被称为_Object pooling_。使用对象池将阻止GC运行。 – Eloff 2011-08-04 16:27:25

可以使用AndEngine提高性能:使用对象池 http://c0deattack.wordpress.com/2011/01/06/andengine-using-the-object-pool/

+4

这不一定会提高性能,但有助于减少垃圾回收,这可能会让游戏更流畅! – 2012-01-13 02:58:57

在进行抢先式优化之前先分析代码的重要性不能被夸大。如果你是GPU绑定的话,优化所有的精灵是没有意义的(这是不太可能的,但是因为你使用的是GLES2.0和可编程管线,而且我们不知道你是如何编写GLSL代码的,所以可能)。

您可以使用几种工具进行性能分析,因为需要进行不同的配置。

对于内存分析,可以使用DDMS和traceview来检查内存分配以及GC在特定时间段内被调用的频率。这太问题有更多的细节:

How can I profile my Android app?

关于经常运行的代码,你可以随时时间自己动手,结果写出到日志文件。它有点劳动密集型,但你可能已经知道自己的代码可能很慢。

+1

好点,我想这是一个非常明显的建议,没人会提出这样的建议:-)另外,考虑到问题的日期,OP没有使用GLES2,因为它当时还在开发中。 – JohnEye 2012-09-10 14:49:06

这将明确地提高您的游戏性能:保持默认主题始终呈现。这里是一个教程http://www.andengine.org/forums/tutorials/andengine-performance-tip-of-the-day-t810.html