当前位置: 代码迷 >> Android >> 在为Android游戏绘制正方形网格时遇到麻烦
  详细解决方案

在为Android游戏绘制正方形网格时遇到麻烦

热度:25   发布时间:2023-08-04 12:18:37.0

我希望将其显示为屏幕中央的7 x 7正方形网格,但是正如您在我当前的代码中看到的那样,垂直线位于正确的位置,而水平线不在正确的位置。 我确信这是一个简单的解决方法,我们将不胜感激-

public class GameGrid extends View {

    Paint black = new Paint();

    public GameGrid(Context context) {
        super(context);

        black.setColor(Color.BLACK);
        black.setStrokeWidth(8);
    }

    @Override
    public void onDraw(Canvas canvas) {

        float startX;
        float stopX;
        float startY;
        float stopY;

        int width = canvas.getWidth();
        int height = canvas.getHeight();

        int gridSize = 7;
        int gridSpacing = width / gridSize;

        //Vertical Grid-lines
        for (int i = 0; i < gridSize; i++) {

            startX = width / 2 - height / 2;
            stopX = width / 2 + height / 2;

            startY = i*gridSpacing;
            stopY = i*gridSpacing;

            canvas.drawLine(startX, startY, stopX, stopY, black);

        }

        //Horizontal Grid-lines
        for (int i = 0; i < gridSize; i++) {

            startX = i*gridSpacing;
            stopX = i*gridSpacing;

            startY = height / 2 - width / 2;
            stopY = height / 2 + width / 2;

            canvas.drawLine(startX, startY, stopX, stopY, black);
        }
    }

您缺少偏移量(在两个轴上)。 为什么不预先计算xOffsetyOffset以及基于该点(xOffset, yOffset)绘制的起点?

像这样的东西:

@Override
public void onDraw(Canvas canvas) {

    float startX;
    float stopX;
    float startY;
    float stopY;

    int width = canvas.getWidth();
    int height = canvas.getHeight();

    int gridSize = 7;
    int gridSpacing = Math.min(width, height) / gridSize;
    int boardSize = gridSize * gridSpacing;

    int xOffset = (width - boardSize)/2;
    int yOffset = (height - boardSize)/2; 

    //Vertical Grid-lines
    for (int i = 0; i < gridSize; i++) {

        startX = xOffset + i*gridSpacing;
        startY = yOffset;

        stopX = startX;
        stopY = startY + boardSize;

        canvas.drawLine(startX, startY, stopX, stopY, black);

    }

    //Horizontal Grid-lines
    for (int i = 0; i < gridSize; i++) {

        startX = xOffset;
        startY = yOffset + i*gridSpacing;

        stopX = startX + boardSize;
        stopY = startY;

        canvas.drawLine(startX, startY, stopX, stopY, black);
    }
}

如果要确保始终居中(例如在横向),则应设置:

int gridSpacing = Math.min(width, height) / gridSize;

我想这个问题是画布不是方形的吗? 高度大于宽度。

因此在垂直网格线中

startX = width / 2 - height / 2;

给出一个负数,并将起点放在屏幕外。 看起来不错,但长度错误。

对于水平网格线

 startY = height / 2 - width / 2;

是一个正数,您将从屏幕下方开始。 同样, endY值也会过冲一些(请注意,水平网格线长于垂直网格线,并且向下偏移)

也许尝试

//Horizontal Y vals
startY = 0;
stopY   = height;
  相关解决方案