【发布时间】:2013-08-08 03:04:03
【问题描述】:
我目前正在开发某种游戏。这是一个横向卷轴,所以很多项目都在移动 - 这导致被重绘。我在另一个(不是 UI)线程的 SurfaceView 上绘制它,但是一旦有更多的项目要绘制,性能就会下降。 是否有任何“好的”机制来提高性能?我可以以某种方式在多个线程中执行此操作吗?
我考虑过创建多个画布,并在每个画布上绘制一部分 ViewObject 列表(在不同的线程中),但是我不知道如何“合并”这些画布。
当我开始添加旋转图像时,性能问题就开始了。我像这样旋转它们:
Matrix matrix = new Matrix();
matrix.preRotate(mRotation, (float) (mResourceBitmaps[mFrame].getWidth()), (float) (mResourceBitmaps[mFrame].getHeight()) / 2f);
Bitmap bmp2 = Bitmap.createBitmap(mResourceBitmaps[mFrame], 0, 0,
mResourceBitmaps[mFrame].getWidth(), mResourceBitmaps[mFrame].getHeight(), matrix, true);
所以我正在为代码中的每个动画帧旋转每个位图。当我开始添加一个带有 LruCache 的 BitmapHolder 类时,它变得更快了,它保持对每个旋转位图(以及“标准”位图)的引用。但它仍然有点滞后。
关于如何在“更专业”的游戏中做到这一点有什么建议吗?由于学习因素,我真的很想自己开发它而不使用任何第三方库。
所以基本上,我的问题是:如何在单个画布/surfaceview 上绘制“大量”位图/资源(因为它们在我的可绘制文件夹中存储为 PNG)?还是我必须退回到表示对象的多个视图元素而不是 SurfaceView?
【问题讨论】: