微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android:LibGDX 2D游戏内存消耗

我在使用libGDX开发2D游戏时遇到了一些内存消耗问题.

这是一款具有丰富图形内容的2D游戏 – 有许多纹理,动画,字体等.
由于某些原因,所有图形内容都在游戏开始时加载 – 这是内存问题.我在不同的设备上测试了内存分配(本机和堆)并得到了不同的结果:
(我按纹理大小划分了所有设备组)

第1组(纹理采用~840 * 480屏幕)

HTC Desire(Froyo):
178Mb(本机) – 12Mb(堆) – 应用程序成功加载

HTC One V(ICS):
30Mb(本机) – 12Mb(堆) – 应用程序成功加载

HTC Desire S(果冻豆):
30Mb(本机) – 12Mb(堆) – 应用程序成功加载

第2组(纹理采用~1366 * 768屏幕)

三星(谷歌)galaxy Nexus
329Mb(原生) – 18Mb(堆) – 效果很好

galaxy TAB(蜂窝)
164Mb(本机) – 10Mb(堆) – 应用程序崩溃(Surface.OutOfResouresException).

我认为在所有Android版本上可能存在一些重要的内存管理差异,这给我带来了这些麻烦.

任何人都可以解释在Android 3.x上加载纹理时究竟发生了什么?或者发布一些链接以了解解决此问题需要做些什么.

一些更新

Toady我在3.x模拟器上做了一些额外的测试(我知道这不是最好的方法,但是之前的日志类似于emu和galaxy Tab)

>我使用1024 * 600采用的纹理运行游戏 – 80%加载资源上的应用程序崩溃(158本机内存分配)
>纹理为800 * 480 – 应用程序在100%加载时崩溃(145Mb本机内存分配)

最后我在新的谷歌Nexus平板电脑(Jelly Bean)上运行应用程序,该平板电脑使用与3.x平板电脑(1280 * 800px)相同的纹理 – 约30Mb本机内存和~12Mb vm堆.

现在我完全不了解正在发生的事情 – 相同的内存分配为纹理800 * 480和1280 * 800 ……

最后

我已经使用一些进度条按需加载资源解决了这种情况.在所有的尝试后,我没有找到另一种方式.

解决方法

如果您想知道为什么Android 3崩溃超过2.X,那是因为ByteBuffer错误.
ByteBuffer使用4倍的内存.所以你必须使用Android 3的低分辨率图像.这在Android 4中得到了解决.

http://code.google.com/p/android/issues/detail?id=16941

幸运的Android 3你有大堆选项(给大约128兆)这是我必须为我们的应用程序打开.

原文地址:https://www.jb51.cc/android/315499.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐