5

我正在使用 OpenGL 1.0 开发适用于 Android 的视频游戏。

我遵循了本教程: http ://www.javacodegeeks.com/2011/06/android-game-development-tutorials.html

我在当前的手机中创建了一个运行良好且流畅(限制为 30 FPS)的小演示:HTC Sensation(Android 4.0.3 Ice Cream Sandwich)。

此外,我在朋友的手机上测试了我的游戏,结果如下:

  • Galaxy S2 = 完美!(30FPS)
  • Galaxy Note = 完美!(30FPS)
  • HTC One S = 完美!(30FPS)
  • 索尼 Xperia Tipo = 完美!(30FPS)
  • 三星 Galaxy Ace GT-S5830 = 性能非常差 >_<'(<10FPS 并在两部手机上测试)

如果您比较 Xperia Tipo 和 Samsung Ace 的规格,您会发现它们几乎是同一款手机。

XPERIA 提示:

  • 320 x 480 分辨率
  • 512MB 内存
  • 高通 MSM7227A 800MHz,GPU Adreno 200

三星银河王牌:

  • 320 x 480 分辨率
  • 278MB 内存
  • 高通 MSM7227 800 MHz,GPU Adreno 200

好吧,内存不一样,不过我的游戏很简单,不超过200MB!但表现完全不同。没道理!

然而……只有一件事不同!三星 Galaxy Ace 使用 Android 2.3.X (Gingerbread),而 Xperia Tipo 使用 Android 4.0.3 (ICS)。

所以,我的矛头指向问题出在 Android 2.3.X - Gingerbread 或 Galaxy Ace 是垃圾手机。

但是...我强迫我的朋友安装 AndEngine 示例并对其进行测试,结果 Nexus ParticleSystem 测试运行良好且流畅。

我完全迷路了!为什么这在性能上有所不同?我做错了什么?

一些额外的信息:

  1. 我遵循该教程中的所有步骤。
  2. 我使用 GL10 (OpenGL 1.0)。
  3. 没有着色器。
  4. 丢失 FPS 没有增量时间(我认为这件事不会解决我的问题)。
  5. 没有本机代码,只有 Java。
  6. SystemClock.uptimemillis() 和 sleep() 来控制 FPS。
  7. MediaPlayer 播放一首 MIDI 歌曲(不再有声音)。
  8. 具有大量 alpha 的纹理(2D 游戏,对于精灵来说是必需的)。
  9. minSDKversion=8

如果您需要更多信息,请告诉我。

4

2 回答 2

0

RAM 可能是瓶颈。您知道 Android 不能很好地处理图像。你在回收你的位图吗?为什么不使用 OpenGL ES 2.0?我正在三星 Galaxy Ace 和 LG p500(都带有 Gingerbread)上开发游戏和测试,没有问题。我可以获得近 50 FPS。

于 2013-02-01T17:26:44.370 回答
0
  1. 千万不要Thread.sleep在UI线程中使用,非常非常糟糕。

  2. 使用statics;这是一种糟糕的 OOP 做法,但在这里很有用。

  3. 利用vertex-buffer objects

  4. 也在这里初始化onSurfaceChanged并获取位置 ( glget***location)。

  5. 这不是你的错,因为在 Froyo 上,垃圾收集器很糟糕,然后在 Gingerbread 上,the touch drivers fire way too many events(Google I_O 2011_ Android 应用程序的内存管理)。因此,请逐渐为您的应用/游戏切换到其他不使用触摸的输入法,例如 android 运动和位置传感器

于 2013-02-02T19:28:41.357 回答