等距瓷砖地图 - 有更大尺寸的瓷砖?

时间:2014-07-03 10:31:36

标签: java graphics tiling

您好我有以下两个等距图块:

普通瓷砖(水):

img

Rock tile:

Imgur

我需要在我的游戏板上添加一些像摇滚瓷砖一样的瓷砖,但问题是,像这块岩石这样的瓷砖需要更高的高度。

目前,岩石瓷砖的高度较大,为18px。 我尝试将岩石分成3块瓷砖,但它看起来很丑,因为你可以看到岩石上的地砖线条。

目前,董事会看起来像这样:

board http://gyazo.com/49f6549404a934919b33c30b94b9c88c.png

如您所见,由于高度差异,瓷砖将具有不同的位置。

我的图形代码层是由图层设计的,其中有一个名为Board的图层,而Board图层包含一个名为Nature的图层,它负责岩石,鲜花等。

我的画板:

@Override
public void render(Graphics g) {
    g.translate(this.translate.getX(), this.translate.getY());

    for (int i = 0; i < tiles[0].length; i++) {
        for (int j = 0; j < tiles[1].length; j++) {
            int x = (j * sprite.getWidth() / 2) - (i * sprite.getWidth() / 2);
            int y = (j * sprite.getHeight() / 2) + (i * sprite.getHeight() / 2);
            this.tiles[i][j].render(g, x, y);
        }
    }

    // rendering rocks and so on..
    this.nature.render(g);
}

这就是我渲染自然层的方式:

@Override
public void render(Graphics g) {
    for (int i = 0; i < this.tiles[0].length; i++){
        for (int j = 0; j < this.tiles[1].length; j++){
            if (this.tiles[i][j] == null)
                continue;
            int width = this.tiles[i][j].getWidth();
            int height = this.tiles[i][j].getHeight();
            int x = (j * width / 2) - (i * width / 2);
            int y = (j * height / 2) + (i * height / 2);

            g.drawImage(this.tiles[i][j], x, y);
        }           
    }
}

我试过减去18的高度,但仍然没有运气,它仍然是凌乱的。 是否有任何正确的方法可以绘制比实际尺寸更大的瓷砖?

1 个答案:

答案 0 :(得分:0)

对瓷砖进行抽象。您目前似乎假设瓷砖只是表示为图像,并且所有内容都是统一的大小。

如你所见,并不总是如此。如果你制作了一个明确的Tile类,你可以将其所有细节封装在那里,并在那里处理处理奇怪东西的责任。

一个简单的Tile类可能如下所示:

public class Tile {
    int offsetX;
    int offsetY;
    Image image;

    // Renders the tile at logical coordinates x, y        
    public void draw(Graphics g, int x, int y) {
        g.drawImage(image, x + offsetX, y + offsetY, null);
    }
}

简而言之,瓷砖本身可以管理它的怪异。

你可以走得更远并将游戏相关数据附加到磁贴上(例如,玩家可以通行,破坏等)。你保持一个统一的接口来处理tile(Tile类API),但是每个tile都可以根据需要改变渲染(使用offsetX / Y来调整它的图像大小)。

编辑:更改用于在渲染中计算x / y的公式,以使用基本地板图块的大小(112,56我猜),与实际图块精灵的大小无关。您不希望精灵大小弄乱网格中的位置(网格大小由基本地板区块大小决定)。图块仅补偿其精灵与基本尺寸(带偏移)之间的差异。