0

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

普通瓷砖(水):

图像

岩砖:

伊姆古尔

我需要在我的游戏板中添加一些像岩石瓷砖这样的瓷砖,但问题是,像这块石头这样的一些瓷砖需要更大的高度水平。

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

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

木板
(来源:gyazo.com

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

我的图形代码层是按层设计的,其中有一个叫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,但仍然没有运气,它仍然很乱。是否有任何适当的方法可以绘制大于实际尺寸的瓷砖?

4

1 回答 1

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);
    }
}

简而言之,瓷砖自己管理它的古怪之处。

您可以走得更远,将游戏相关数据附加到图块(例如玩家可通过、破坏等)。您为使用瓷砖(瓷砖类 API)保留一个统一的界面,但每个瓷砖可以根据需要更改渲染(使用 offsetX/Y 调整其图像大小)。

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

于 2014-07-03T11:48:57.740 回答