1

ブラシサイズを作成しようとしている2Dタイルゲームがあります。現在、私のコードは次のようになっています。

if (isMouseClicked0) {
    int grid_x = Math.round(mouseX / blockSize);
    int grid_y = Math.round(mouseY / blockSize);
    for (int x = 0; x < brushSize; x++) {
        for (int y = 0; y < brushSize; y++) {
            world.setAt(grid_x, grid_y, b[inventorySelect]);
            grid_x += x;
            grid_y += y;
        }
    }
}

メソッドは次のsetAt()ようになります。

public void setAt(int x, int y, BlockType b) {
    if (x <= Display.getWidth() / blockSize && y <= Display.getHeight() / blockSize) {
        blocks[x][y] = new BaseBlock(b, x * blockSize, y * blockSize);
    }
    render();
}

これにより、現在次の出力が生成されます。

タイル

左上の最初のタイルの上のタイルは、マウスをクリックした場所です。次のタイルがレンダリングされていないことがわかります。私はこれに何時間もいるので、おそらく単純なものが欠けています。何か助けはありますか?

編集:ブラシのサイズは2なので、4つのタイルを作成する必要があります。blockSize、それは32私のブロックの大きさです。

4

1 に答える 1

1

問題は次のとおりです。

grid_x += x;
grid_y += y;

基本的に斜めに動いています。これはうまくいくかもしれません:

    for (int x = 0; x < brushSize; x++) {
        for (int y = 0; y < brushSize; y++) {
            world.setAt(grid_x + x, grid_y + y, b[inventorySelect]);
        }
    }
于 2013-03-13T01:55:14.903 に答える