【发布时间】: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 位图(游戏(代码需要修复!”)
-
我对问题进行了一些重大修改,但我没有意识到我的问题实际上并不存在。