如何处理地图部分下方的角色?

How to deal with character going under parts of map?

在我的所有项目中,我一直在渲染整个地图,然后是所有实体。但是现在有些部分,实体必须进入地图的某些部分下方,而我只是坐在这里不知道该怎么做。

我的(伪代码)渲染器:

Render(){

  For all Layers
    For all Rows
      For all Blocks
        Block.Render()


  For all Entities
    Entity.Render();

}

最终导致实体透支了它们应该位于的部分地图。理论上如何正确地做到这一点?

这实际上取决于您的特定渲染方案,但假设自上而下的视图,大致如下:

Render(){
  For all Layers from bottom to top
    For all Rows in layer
      For all Blocks in row
        Block.Render()
    For all Entities on layer
      Entity.Render()
}

即按距相机的距离渲染事物 descending-ordered,对应于层数。

正如 yuri kilochek 在他的回答中所建议的,您确实可以在此处使用 painter's algorithm

另一种处理方法是,根据您的 BlockEntity 类 的外观,将它们全部放在一个数组中,然后 sort 这个数组得到一个和以前类似的结构。我在这里看到的主要缺点可能是排序可能很昂贵(取决于您要渲染的项目数量),并且您可能需要您的对象知道它们的行/层才能对它们进行排序。

如果您使用 opengldirectx 来渲染您的场景,您也可以利用 the z-buffer。这个想法是用每个对象的 layer 丰富您的顶点数据,然后通过启用具有 greater or equal 图层值的对象来绘制 z-buffer 魔法。这将允许您保留实际的渲染循环,同时考虑对象所在的层。