2011-06-22 5 views
-3

私はゲームのコードが駄目です。OutOfMemoryErrorが発生します。ビットマップサイズがVMの予算を超えています。Androidゲームコード - OutOfMemory!

私が正しいとすれば、VM予算は16 MBです。

私はMainPanelクラスがSufaceViewを拡張し、SurfaceHolder.Callbackを実装しています。

問題は別のクラスのビットマップに到達する必要があることです。私はこれが難しいはずがないと思いますか?

私は敵を生み出すEnemyCreatorという名前のクラスを持っており、エンティティ(敵)は作成するビットマップが必要です。しかし、MainPanelではなくEnemyCreatorで新しいビットマップを作成するにはどうすればよいですか?

現在、ビットマップはMainPanelで静的なので、私はデザインが悪いと推測しています。ゲームに苦しんでいる種類のメモリリークが発生します(問題の状態:android.graphics.Bitmap.nativeCreate(ネイティブメソッド))。

例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

Downvoted前に同じ問題を持っていたので、「本当に汚いAndroidのビットマップが(ゲーム(コードを固定する必要があります!」 – Kromster

+0

私はいくつかの主要な編集をした私はこれを実現質問は、私は自分の質問が実際にそこになかったことに気付かなかった。 –

答えて

2

ご了承ください。 1つのクラス/タイプに対して1つのBitmapオブジェクトを作成するだけです。 新しいオブジェクトを作成するたびに再作成する必要はありません。ビットマップは再利用可能であり、キャンバスは必要なだけ描画することができます。

それは問題ではないですが、実行する要求ので、私は