2011-05-17 42 views
0

我有下面的代碼不顯示;位圖在Android中

@Override 
public void run() 
{ 
    tickCount = 0L; 
    Log.d(TAG, "Starting game loop"); 
    while (running) 
    { 

     try 
     { 
      gameCanvas = surfaceHolder.lockCanvas(); 
      synchronized (surfaceHolder) 
      { 
       // Log.d(TAG, tickCount + " ticks so far"); 
       tickCount++; 
       updateGameState(); 

       render(gameCanvas); 
      } 
     } finally 
     { 
      if (gameCanvas != null) 
      { 
       // do this in a finally so that if an exception is thrown 
       // during the above, we don't leave the Surface in an 
       // inconsistent state 
        surfaceHolder.unlockCanvasAndPost(gameCanvas); 
      } 
     } 
    } 
} 

我遇到的問題是當我測試應用程序的位圖不顯示。我曾嘗試使用setBitmap複製drawable。

例如。

mutableBackground = backgroundImage.copy(Bitmap.Config.ARGB_8888, true); 

其中backgroundImage是解碼的可繪製資源。

和..

mutableBackground = Bitmap.createBitmap(320, 480, Bitmap.Config.ARGB_8888); 
    gameCanvas = new Canvas(); 
    gameCanvas.setBitmap(mutableBackground); 
    gameCanvas.drawColor(Color.GREEN); 

和..

gameCanvas = new Canvas(mutableBackground); 

如果我畫的渲染方法的線,它確實借鑑..但在黑色的背景。奇怪的是,如果我做

int myColor = mutableBackground.getPixel(100, 100); 
    int greeness = Color.green(myColor);; 
    Log.d(TAG, "Greeness - " + greeness); 

日誌顯示.. Greeness - 255

因此,位圖被染成綠色,但它顯示爲黑色。 這真是困惑我,我必須真正很快排序了這一點。

感謝任何人,可以幫助。

回答

1

這是我的正常縣外一點點,但因爲沒有其他人已經回答了,我會刺傷。 :-)

當你繪製這種方式(即使用surfaceHolder.lockCanvas)時,你需要使用你得到的畫布......你不能只是創建一個新的畫布並將其發送給unlockCanvasAndPost。在正常情況下,您也不應該使用畫布的底層位圖。在你的渲染功能,你爲什麼不只是畫到畫布(第一色爲背景,甚至整個位圖,然後你需要的任何其他人)。例如,像:

render(Canvas c) { 
    c.drawColor(Color.GREEN); 
    c.drawBitmap(sprite, x, y, null); 
} 
+0

感謝。我認爲我是通過發送畫布自己的位圖來做錯的。只是不能找出一種方法來引用它之後。 – Finn 2011-05-17 18:24:48

+0

@Finn我很高興我們解決了您的問題;感謝您花時間接受我的回答。 :-) Android動畫不是微不足道的......我發現儘可能使用示例代碼作爲出發點很有幫助。關於我的頭,我能想到的最接近的東西就是SDK中的Lunar Lander示例。祝你好運! – 2011-05-17 20:35:47