Android游戏代码 - OutOfMemory!

时间:2011-06-22 13:35:38

标签: android bitmap

我正在使用一个草率的游戏代码,它会导致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;
}

有人有建议吗?

1 个答案:

答案 0 :(得分:2)

为你的笔记。 只为一个类/类型创建一个Bitmap对象。 每次创建新对象时都无需重新创建它。位图是可重用的,画布可以根据需要绘制它。

我意识到这一点,因为我在

之前遇到了同样的问题