gpt4 book ai didi

java - 使用 canvas.drawBitmap 时位图重叠

转载 作者:行者123 更新时间:2023-12-01 11:48:01 24 4
gpt4 key购买 nike

我最近开始学习android和java,并开始练习制作一款太空入侵者类型的游戏。

为了绘制所有图像(玩家/敌人/等),我一直在使用重写的 onDraw 方法和 canvas.DrawBitmap(..)。这就是我的问题开始的地方。每当我用新的 X,Y 坐标绘制图像时,以前的位图仍然在 Canvas 上,这使得所有内容都重叠。有什么方法可以刷新 Canvas 或者只是摆脱“剩菜”(我什至不知道该怎么调用它们)。当我这样做时,我的印象是我只是在屏幕上移动了 1 个图像,但看起来我错了。

这是我用来绘制玩家位图的代码:

public void render(Canvas canvas){
//draw the player image
canvas.drawBitmap(_bmPlayerImg, (float) (_dX - (_iHalfWidth)),
(float)(_dY - (_iHalfHeight)), null);
}

onDraw() 方法:

@Override
protected void onDraw(Canvas canvas) {

//draw the player
_player.render(canvas);

}//end method

每 50 毫秒在我用作游戏计时器的线程中调用 onDraw() 方法:

public Runnable runnable = new Runnable() {
@Override
public void run() {
canvas = null;

try {
canvas = surfaceHolder.lockCanvas();
synchronized(surfaceHolder){
//update the state of all objects in the game
gamePanel.update(canvas);

gamePanel.onDraw(canvas);
}
} finally {
if (canvas != null) {
surfaceHolder.unlockCanvasAndPost(canvas);
}//end if
}//end finally
handler.postDelayed(this, _iRepeatTime);
}
};

感谢任何帮助...我尝试查找但找不到任何内容。

最佳答案

在 Canvas 上绘制任何内容之前:

//clear the canvas
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);

现在你的 Canvas 已经清晰了,你可以画出你的角色了。

如果您的 onDraw 方法位于扩展 View 类中,并且是通过调用 invalidate() 触发的,则 Canvas 会自动清除自身。但你是手动调用它(看起来你正在使用表面/纹理 View ?),所以你必须手动清除它。

关于java - 使用 canvas.drawBitmap 时位图重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29001159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com