2011-06-22 79 views
-3

我正在使用一個遊戲的草率代碼,它會導致OutOfMemoryError:位圖大小超過虛擬機預算。Android遊戲代碼 - OutOfMemory!

如果我是對的,VM預算是16 MB。

我無法直接得到它,我的MainPanel類擴展了SufaceView並實現了SurfaceHolder.Callback。

問題是我需要從另一個類的位圖。我猜這應該不難?

我有一個名爲EnemyCreator的類,它產生了敵人,實體(敵人)需要創建一個位圖。但是,如何在EnemyCreator中創建新的位圖而不是在MainPanel中?

現在位圖在MainPanel中是靜態的,我猜測它是不好的設計,會導致遊戲遭受的內存泄漏(問題狀態:android.graphics.Bitmap.nativeCreate(Native Method))。

例的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

爲您的筆記。 只需爲一個類/類型創建一個Bitmap對象。 每次創建新對象時都不需要重新創建它。位圖是可重用的,並且畫布可以根據需要繪製它。

我意識到這一點,因爲我以前