Android:巨大的多层滚动背景

Android:巨大的多层滚动背景,android,canvas,scroll,bitmap,Android,Canvas,Scroll,Bitmap,我正在开发一款侧滚android游戏,但遇到了一个小问题 游戏正在画布对象上渲染图形。该游戏具有大约6个滚动层,主地面层,碰撞层,前景层,和两个背景层,所有滚动速度可变的相机深度 现在,问题出在这里: 游戏的图形功能巨大独特的水平,是在他们的整体绘制。它不是平铺的,没有重复的图形。然而,当加载整个图形层时,我收到一个内存不足异常。为了解决这个问题,我将我的所有图层分割成200 x 300个独特的矩形瓷砖,游戏只在可见时加载可见的内容。它不能一次加载所有磁贴,因为它会抛出内存不足异常。因此,当然,

我正在开发一款侧滚android游戏,但遇到了一个小问题

游戏正在画布对象上渲染图形。该游戏具有大约6个滚动层,主地面层,碰撞层,前景层,和两个背景层,所有滚动速度可变的相机深度

现在,问题出在这里: 游戏的图形功能巨大独特的水平,是在他们的整体绘制。它不是平铺的,没有重复的图形。然而,当加载整个图形层时,我收到一个内存不足异常。为了解决这个问题,我将我的所有图层分割成200 x 300个独特的矩形瓷砖,游戏只在可见时加载可见的内容。它不能一次加载所有磁贴,因为它会抛出内存不足异常。因此,当然,这需要在内存磁贴不再可见时对其进行处理,否则我将继续将这些磁贴添加到内存中,然后再次命中内存不足异常。这意味着我必须使用BitmapFactory从游戏循环中的资源为每个可见的磁贴创建一个新的位图。当然,随着这些磁贴位图在游戏循环中初始化,每当磁贴离开可见性时,我必须处理垃圾收集器延迟


有没有更好的方法来做到这一点,只使用画布和保持我独特的宏瓷砖,而不诉诸可重用的微瓷砖?使用OpenGL会有好处吗?如何或为什么?

OpenGL允许您明确控制何时从内存加载/卸载纹理。您可以利用OpenGL的一些特性来开发一个“分页”系统,用于引入和卸载纹理。这将允许您避免垃圾收集器

但是你通常是在做正确的事情——从图形内存中删除不相关的图形,为那些需要显示的图形腾出空间