我是 Android 编程新手,现在我正在尝试为一个人制作一款简单的海战游戏。船是地方,球员击球,看球是否命中。基本上,该字段如下所示:
代码是:
public void onDraw(Canvas canvas) {
if (getWidth() > getHeight()) {
rebro = getHeight();
} else {
rebro = getWidth(); // the smaller size of screen is "rebro"
}
rebro_piece = rebro / 10; // divide the screen by 10 (to get 10x10 field)
Paint background = new Paint();
background.setColor(getResources().getColor(R.color.game_background));
canvas.drawRect(0, 0, rebro, rebro, background); // draw background
Paint divider = new Paint();
divider.setColor(getResources().getColor(R.color.divider_black));
// drawing divider lines
for (int i=0; i<11; i++) {
canvas.drawLine(0, i*rebro_piece, rebro, i*rebro_piece, divider); // horizontal
canvas.drawLine(i*rebro_piece, 0, i*rebro_piece, rebro, divider); // vertical
}
canvas.drawLine(rebro-1, 0, rebro-1, rebro, divider);
}
这就是我制作“场”的方式。
在另一个类中,我有一个收集数字x
和y
一个 10×10 数组的方法,该数组表示船只的放置位置。为了调试,我需要在我的领域中绘制它们。船舶坐标在一个循环中检索。
所以我写了一个drawShip(int x, int y)
方法。
在 Stack Overflow 上,我提出了一个关于“为什么我不能在外面画画onDraw()
?”的问题。我已经将我的方法更改为:
public void drawShip(int x, int y) {
myX = x; //global
myY = y; //global
needToPaintShip = true; //boolean
invalidate(); // refreshing?
needToPaintShip = false;
}
这里needToPaintShip
决定是否需要重绘画布。
我还编辑了onDraw(Canvas canvas)
方法:
if(needToPaintShip == true) {
Paint ship = new Paint();
ship.setColor(getResources().getColor(R.color.ship_color));
Log.d(TAG, "onDraw(): rebro_piece = " + rebro_piece + " , myX = "+ myX + " , myY = " + myY); // I only get the last coordinates!
Rect r = new Rect(myX*(rebro_piece),myY*rebro_piece, myX*(rebro_piece+1), myY*(rebro_piece+1));
canvas.drawRect(r, ship);
}
但结果很糟糕:
伙计们,我很绝望。我该如何解决这个问题并在现场绘制“船”?