0

我正在 Canvas 上制作类似 Battleships 游戏的东西。让我们看看领域: 在此处输入图像描述

问题是:当我按下另一个单元格时,黄色的单元格将再次变为黑色。我想保存它的状态,这样这个黄色单元格就不会再变黑了。

这是被击中时要做什么的代码:

// it's some method A
case 1:
        drawHit = true;
        this.draw_x = x;
        this.draw_y = y;
        invalidate();
        break;

// It's in onDraw() method
if (drawHit == true) {
        Log.d(TAG, "drawHit! drawX = " + draw_x + ", drawY = " + draw_y);
        Paint ship = new Paint();
        ship.setColor(getResources().getColor(R.color.ship_color));
        Rect r = new Rect(draw_x*rebro_piece, draw_y * rebro_piece, (draw_x+1) * rebro_piece, (draw_y+1)*rebro_piece);
        canvas.drawRect(r, ship);
        drawHit = false; }
4

2 回答 2

1

我相信最好的解决方案是改变你的方法,这里有一个简单的例子:

创建一个类来为动作建模,例如:

public class BattleTurn {
 //here you save your Rect you had on your onDraw()
 //but you will have to create the moment user clicks
 private Rect rect;
 private boolean hit;
 //...
}

为游戏的每一回合保留一个列表。

List<BattleTurn> turns = new ArrayList<BattleTurn>();

每次有人玩时,您都会添加一个新回合 ( turns.add(...)) 并使您的画布无效,以便重新绘制自己。

在您的 上onDraw(),您经过每一轮并绘制它:

//for each turn you draw it on the canvas
for (BattleTurn turn: turns){
 //draw the turn like you already do
 if (turn.getHit()) {
        Log.d(TAG, "drawHit! drawX = " + draw_x + ", drawY = " + draw_y);
        Paint ship = new Paint();
        ship.setColor(getResources().getColor(R.color.ship_color));
        canvas.drawRect(turn.getRect(), ship);
 }
}
于 2013-06-10T19:47:58.177 回答
1

我最近在画布上打印点的应用程序中遇到了这个问题。每个点都有不同的颜色和大小,我必须保存它们的状态。

您所要做的就是创建一个小类,在其中保存您的单元格,保存您的信息并将它们全部存储在一个列表中。在 onDraw() 方法中,在 drawRect() 之前,使用您已经保存的颜色更新您的 Paint 对象。

我将在这里向您展示我的片段。(建议1:不要在每次调用onDraw时都实例化Paint,最好在外面声明,可能作为类中的私有变量)

private class MyPoint {

        private float x;
        private float y;
        private int color;
        private int size;
    // + constructor, getters and setters
}

@Override
    public void onDraw(Canvas canvas) {
        for (MyPoint point : points) {
            paint.setColor(point.get_color());
            canvas.drawCircle(point.x, point.y, current_size, paint);
        }
    }
于 2013-06-10T19:47:58.797 回答