您好我有以下两个等距图块:
普通瓷砖(水):
Rock tile:
我需要在我的游戏板上添加一些像摇滚瓷砖一样的瓷砖,但问题是,像这块岩石这样的瓷砖需要更高的高度。
目前,岩石瓷砖的高度较大,为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的高度,但仍然没有运气,它仍然是凌乱的。 是否有任何正确的方法可以绘制比实际尺寸更大的瓷砖?
答案 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我猜),与实际图块精灵的大小无关。您不希望精灵大小弄乱网格中的位置(网格大小由基本地板区块大小决定)。图块仅补偿其精灵与基本尺寸(带偏移)之间的差异。