我正在使用一个草率的游戏代码,它会导致OutOfMemoryError:位图大小超过VM预算。
如果我是对的,VM预算是16 MB。
我无法直接使用它,我的MainPanel类正在扩展SufaceView并实现SurfaceHolder.Callback。
问题是我需要从另一个类获取位图。我猜这应该不难?
我有一个名为EnemyCreator的类产生了敌人,实体(敌人)需要创建一个位图。但是如何在EnemyCreator中而不是在MainPanel中创建新的位图?
现在Bitmaps在MainPanel中是静态的,我猜测它是糟糕的设计,会导致游戏遭受的内存泄漏(问题陈述:android.graphics.Bitmap.nativeCreate(Native Method))。 / p>
示例MainPanel:
public static Bitmap ufoShieldBitMap = (BitmapFactory.decodeResource(getResources(), R.drawable.ufo_shield, optionsAlpha));
public static Bitmap explosion_SmallBitmap = (BitmapFactory.decodeResource(getResources(), R.drawable.explosion, options));
示例EnemyCreator:
private void createAstroid() {
int randomAstroid = this.random.nextInt(astroidCount);
int randomXpos = this.random.nextInt(BackgroundManager.INSTANCE.screenWidth - 40);
switch(randomAstroid) {
case 0:
new EnemyAstroid(MainPanel.astroidBitmap, randomXpos, SPAWN_Y, 17, 17); // X, Y, FPS, FrameCount
break;
}
有人有建议吗?
答案 0 :(得分:2)
为你的笔记。 只为一个类/类型创建一个Bitmap对象。 每次创建新对象时都无需重新创建它。位图是可重用的,画布可以根据需要绘制它。
我意识到这一点,因为我在
之前遇到了同样的问题