我正在编写一个Android游戏中的蛇游戏,我被onDraw
方法中无法使用循环绘制墙的事实所阻挡,墙只是不显示。
有没有办法可以画出墙,以便onDraw
保持完整并继续重绘其他东西(蛇和物体)?
GameView:
public void surfaceCreated(SurfaceHolder holder) {
gameLoopThread.setRunning(true);
gameLoopThread.start();
}
@Override
protected void onDraw(final Canvas canvas) {
canvas.drawColor(Color.WHITE);
if(drawWall) {
int i = 0;
while(i < getWidth()) {
canvas.drawBitmap(wall.getImage(), i, 0, null);
i += 17;
}
drawWall = false;
}
x += dx;
y += dy;
}
GameLoop:
public class GameLoopThread extends Thread {
private GameView view;
private boolean running = false;
public GameLoopThread(GameView view) {
this.view = view;
}
public void setRunning(boolean run) {
running = run;
}
@Override
public void run() {
while (running) {
Canvas c = null;
try {
c = view.getHolder().lockCanvas();
synchronized (view.getHolder()) {
view.onDraw(c);
}
} finally {
if (c != null) {
view.getHolder().unlockCanvasAndPost(c);
}
}
}
}
}
答案 0 :(得分:0)
我不知道您的视图层次结构是什么,但是,为什么不让您的生活变得更轻松,只需在SurfaceView背后设置一个ImageView
的墙壁?或者FrameLayout
包含SurfaceView
并将墙作为FrameLayout
的背景图像?与墙壁的碰撞将在代码和图形表示中处理墙壁真的只是为了用户的利益。
将墙壁的图像放在背景中,让Android担心,只需集中精力重绘蛇和点。
话虽如此,看起来像是在后台线程中画画。你无法在Android上实际操作,你应该在主线程中绘图。