这个标题已经相当自明了,但我还是想解释一下我的思考过程。

我们都知道这种视图的基本公式是depth = -y,更精确地说是depth = -bbox_bottom。这在平坦的世界中效果很好,但一旦悬崖高度变化出现,问题就开始显现。

我曾考虑修改公式,为每个对象添加一个变量,指明它们所在的高度层,于是公式变为depth = -(bbox_bottom + room_height * elevation_level),其中elevation_level指定对象所在的层级。当对象处于第1层时,它会绘制在该房间内所有其他非更高层对象的前面。这种方法效果不错,但前提是对象的最大尺寸不能超过悬崖面的尺寸。

这里有一个更具体的场景:设想一棵高大的树,正上方是悬崖,悬崖顶上有一棵小树。高树比悬崖和小树加起来还要高,按理说高树应该显示在前面,但从我的公式来看,小树会正好渲染在高树的中间(而不是悬崖,因为悬崖属于第0层)。这是第一个问题。第二个问题:如何处理楼梯?楼梯至少有两个瓦片单元格大小。楼梯应该属于哪个层级?如果你的答案是第1层,那如何让角色显示在楼梯前面?如果你的答案是第0层,那又如何让角色显示在楼梯前面?你看,两个选项结果相同但核心逻辑不同。在我看来,将楼梯放在第0层,与悬崖同层,是正确的选择。因为当玩家开始通过楼梯前往第1层时,玩家的Y轴高度会增加。这里讨论的是从左到右的水平楼梯,垂直楼梯则是另一种情况。

你应该明白我的意思了。我的问题是:在这种情况下,你如何管理深度排序?你有没有更好的方法?