Android:巨大的多层滚动背景

问题描述:

我正在开发一个横向滚动的android游戏,我碰到过一个呃逆。Android:巨大的多层滚动背景

游戏在Canvas对象上呈现图形。该游戏具有大约6个滚动层,主地层,碰撞层,前景层和两个背景层,这些层都以可变速度滚动以获取相机深度。

现在,问题出现在这里: 游戏的图形功能巨大的独特水平,完整地绘制出来。它不是tilebased,没有图形重复。但是,加载整个图形层时,会收到内存不足异常。为了解决这个问题,我将所有图层切分为200 x 300个独特的矩形图块,并且游戏只在可见时加载可见的图片。它不能一次加载所有的图块,因为它会抛出内存不足异常。所以当然,这要求我在内存块不再可见的情况下处理内存块,否则我会继续将这些内存块添加到内存中,并再次触发内存异常异常。这意味着我必须使用BitmapFactory为游戏循环中的资源创建一个新的位图,以显示每个图块。当然,在游戏循环中初始化这些瓦片位图时,每当瓦片留下可见性时,我必须处理垃圾收集器滞后。

有没有更好的方式去完全使用画布和保留我独特的“宏”瓷砖,而不诉诸可重复使用的微瓦片?它会使用OpenGL来获得好处吗?如何或为什么?

OpenGL将允许您显式控制纹理何时从内存中加载/卸载。您可能可以利用OpenGL的某些功能来开发用于引入和卸载纹理的“分页”系统。这将允许你避免垃圾收集器。

但是,您通常会做正确的事情 - 从图形内存中删除不相关的图形,以便为需要显示的人腾出空间。