【问题标题】:Android game code - OutOfMemory!Android 游戏代码 - OutOfMemory!
【发布时间】:2011-06-22 13:35:38
【问题描述】:

我正在为游戏编写一个草率的代码,它会导致 OutOfMemoryError:位图大小超出 VM 预算。

如果我是对的,VM 预算是 16 MB。

我很难搞清楚,我的 MainPanel 类正在扩展 SufaceView 并实现 SurfaceHolder.Callback。

问题是我需要从另一个类获取位图。我猜这应该不难吧?

我有一个名为 EnemyCreator 的类,它会生成敌人,而实体(敌人)需要创建一个位图。但是如何在 EnemyCreator 中而不是在 MainPanel 中制作新的位图?

现在位图在 MainPanel 中是静态的,我猜这是糟糕的设计,会导致游戏遭受的那种内存泄漏(问题状态:android.graphics.Bitmap.nativeCreate(Native Method))。

示例主面板:

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;
}

有人有建议吗?

【问题讨论】:

  • 投了反对票,因为这不是一个问题,而是要求做“真的很脏的 Android 位图(游戏(代码需要修复!”)
  • 我对问题进行了一些重大修改,但我没有意识到我的问题实际上并不存在。

标签: android bitmap


【解决方案1】:

供您参考。 只需为一种类/类型创建一个位图对象。 每次创建新对象时都无需重新创建它。位图是可重复使用的,画布可以根据需要绘制它。

我意识到这一点是因为我之前遇到过同样的问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多