在基于等距图块的地图中渲染多个高度



晚上好。

我一直在与等距瓷砖世界有些混乱,我对呈现上的元素有一些疑问。当我构建一个高度图时,我先渲染它,然后在顶部添加不同的元素,最后一个位移似乎正确。

public void render(Graphics2D g2d) {
    for(int i = 0; i < tileGrid.length; i++) {
        Point isop = NeoMath.getInstance().cartToIso(i % yAmmount, i / yAmmount, GlobalDataStorage.tileWidth, GlobalDataStorage.tileHeight);
        TileManager.getInstance().getTileByID(tileGrid[i]).render(g2d, isop.x, isop.y);
    }
    for(Entity entity : entityList) {
        entity.render(g2d);
    }
}

(在更新中计算实体的位置(。

这样,我没有任何问题,因为一切都在相同的高度上渲染,当我尝试在其中添加其他楼层时,问题出现了。假设我希望它具有三个高度。我有一个瓷砖列表,而不是单个数组的列表,并呈现它们上的每个元素:

    public void render(Graphics2D g2d) {
        int flag = 0;
        for(int i = 0; i < tileGrid.size(); i++) {
            Point isop = NeoMath.getInstance().cartToIso(i % yAmmount, i / yAmmount, GlobalDataStorage.tileWidth, GlobalDataStorage.tileHeight);
            for(int k = 0; k < tileGrid.get(i).size(); k++) {
    TileManager.getInstance().getTileByID(tileGrid.get(i).get(k)).render(g2d, isop.x, isop.y - (GlobalDataStorage.tileZ * k));
            }
        while(flag < currentList.size() && 
          currentList.get(flag).getPosition().equals(new Point(i % yAmmount, i / 
          yAmmount))) {
            currentList.get(flag).render(g2d);
            flag++;
            }
        }
    }

当前清单是实体列表。

这样,我有一个问题,即当实体移动到新的位置时,它们被瓷砖重叠,因为它们是在实体之后渲染的,并且直到达到命运之前,实体的位置才会改变。我可以在渲染之前将其更改为新位置,但这意味着在另一个轴上,以前的瓷砖在实体之后被渲染,因此由于重叠而使其失去了一秒钟。

当我尝试绘制选择矩形时,这也弄乱了,因为它被困在被渲染的瓷砖后面。我不希望它们重叠整个地图,因此在完成所有渲染后都无法绘制它们。

有人知道我可以尝试的另一种方法吗?

事先谢谢你。

在第一遍中绘制整个地板层。然后在第二通道中绘制所有墙壁,物体以及移动实体。

我可以在渲染之前将其更改为新位置,

暗黑破坏神的程序员戴维·布雷维克(David Brevik(在他的GDC Talk Diablo:经典游戏后使用此选项提到了此选项。这是他的第一个"什么问题"例子!

参考:https://www.youtube.com/watch?v=vscdpa6sukc& t = 20m17s

事实证明,这是等距游戏中的经典障碍。

相关内容

  • 没有找到相关文章

最新更新