Android:巨大的多层滚动背景

时间:2010-10-15 22:15:06

标签: android canvas scroll bitmap

我正在开发一个横向滚动的安卓游戏,我遇到了一个打嗝。

游戏正在Canvas对象上渲染图形。该游戏具有大约6个滚动图层,主要地面图层,碰撞图层,前景图层和两个背景图层,所有这些图层都以可变速度滚动以显示相机深度。

现在,问题在于: 游戏的图形具有巨大的独特水平,完整地绘制出来。它不是基于图块的,不重复图形。但是,加载整个图形图层时,我收到内存不足异常。为了解决这个问题,我将所有图层切成200 x 300个独特的矩形图块,游戏只会在可见时加载可见的图像。它不能同时加载所有的tile,因为它会抛出Out of Memory异常。所以当然,这要求我在内存磁贴不再可见时从内存磁贴中处理,否则我将继续将这些磁贴添加到内存中并再次点击Out of Memory异常。这意味着我必须使用BitmapFactory从游戏循环中的资源为每个变为可见的图块创建新的位图。当然,在游戏循环中初始化这些瓦片位图时,每当瓦片保持可见性时,我必须处理垃圾收集器延迟。

是否有更好的方法可以单独使用Canvas并保留我独特的“宏”瓷砖而不是使用可重复使用的微型瓷砖?相反,使用OpenGL会有好处吗?怎么或为什么?

1 个答案:

答案 0 :(得分:0)

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

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