我有以下代码;
@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
因此位图显示为绿色,但显示为黑色。 这真让我感到困惑,我不得不尽快解决这个问题。
感谢任何可以提供帮助的人。
答案 0 :(得分:1)
这有点偏离我的正常情况,但由于没有其他人回答,我会采取刺。 : - )
当你以这种方式绘制时(即使用surfaceHolder.lockCanvas)你需要使用你得到的画布...你不能只创建一个新的画布并将其发送到unlockCanvasAndPost。在正常情况下,你也不应该使用画布的底层位图。在渲染功能中,为什么不直接绘制画布(首先是背景的颜色,甚至是整个位图,然后是你需要的任何其他颜色)。例如,像:
render(Canvas c) {
c.drawColor(Color.GREEN);
c.drawBitmap(sprite, x, y, null);
}