【问题标题】:How to implement a logical render order of isometric tiles?如何实现等距平铺的逻辑渲染顺序?
【发布时间】:2014-10-30 22:26:45
【问题描述】:

情况:我正在用 libGDX 编写一个 2D 等距风格的 Java 游戏。 现在我有一个可移动的播放器,它可以正确地与固体物块碰撞。

问题: 现在谈到瓷砖的渲染顺序。默认情况下,库代码从底部地图层渲染到顶层。 (地面是第 0 层,对象层是第 1 层)这是有道理的。我在上面画了玩家。这意味着玩家总是掌握在某些情况下没有意义的一切之上。

目标: 由于等距外观意味着具有某种 3D 视角,因此玩家可以在对象的后面或前面。所以我必须想出一些代码来决定玩家是在后面还是前面渲染。我以这个冰箱为例:

我希望我的意思是“逻辑冲突”是可以理解的。我对如何实现这一点有一些想法,但这将是代码中的一团糟。所以我想问是否有人有这方面的经验,或者可以给我一些可以帮助我的好资源。

感谢阅读!

【问题讨论】:

  • 当然,显而易见的解决方案是将播放器保持在对象层中,无论是在其他对象的后面还是在前面。
  • 是的,我的问题是最好的方法是什么。你只是重复了我的问题/问题。
  • Painters Algorithm 可能是一个好的开始。在不知道您使用的是哪个渲染库的情况下,很难给出建议。消极的态度也无济于事。

标签: java libgdx rendering collision isometric


【解决方案1】:

这取决于您的渲染方式。想到的一件事是从上到下和从左到右渲染对象/图块,这样在大多数情况下,对象应该始终位于正确的图层中。现在取决于您如何制作图形,这可能存在缺陷。如果是这样,您也可以有几层优先级,以绘制对象/图块的不同部分,或者在其他之前绘制一些东西。如果您也有瓷砖和对象作为单独的类型,您可以在瓷砖之前和之后绘制对象,以满足不同的需求。对于这样的情况,您还可以实现一些切片以包含对象,但是与我提到的其他方法相比,这也可能浪费处理器时间。

您将如何比较对象位置与图块位置实际上并不是很困难。可能一个足够的方法是将瓦片位置与对象位置进行比较。让我们假设一个情况,您有大小为 32 x 32 的图块,并且有一个 25 x 18 的对象。对象将在偏移量 0 x 01 x 0 的图块前面,但在 0 x 11 x 后面1(如果我们想象瓷砖从上角开始)。因此,我们首先在 0 x 01 x 0 处绘制图块,然后是对象,然后在 0 x 1 处绘制图块1 x 1。它应该自然落入正确的位置,代码逻辑相当简单。

希望您对如何实现它有一些想法:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    相关资源
    最近更新 更多