【问题标题】:Texture rendering order in LibGDXLibGDX 中的纹理渲染顺序
【发布时间】:2012-08-06 15:30:13
【问题描述】:

我正在将游戏从 iOS 和 Windows Phone 移植到 Android。我为移植所遵循的大部分代码都来自 Windows Phone 版本,只是因为它与 Java 最相似。我的问题与 LibGDX 中的 OrthographicCamera 类有关。

我使用游戏对象作为这个游戏的组件容器方法。这可以在这里阅读:http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/,这样你就知道我在说什么了。因此,游戏中的几乎所有内容都扩展了 Component 组件类。每个游戏对象,即一个球,都是一个由组件组成的游戏对象,即 Sprite、RigidBody(用于物理)、Transform2(位置、旋转等)。这包括 Camera2 类,它只是包装了一个 OrthographicCamera 成员。

我有两个问题,我一直在研究它。我无法弄清楚如何进行分层。游戏有一个抽屉,用户可以向下滑动以拖动打开。这应该在游戏中的任何其他内容之上。开发 XNA 版本的人实现这一点的方法是拥有多个 SpriteBatch,并且基本上将每个 SpriteBatch 视为一个层。这在 LibGDX 中不起作用,并且使用多个 SpriteBatches 是不好的做法。问题是,游戏对象被组织成一棵树,它们是根据树的遍历进行渲染的,因此最终排序是基于对象插入树的时间。我已经研究了 DecalBatch 以便我可以使用 Z 排序,但由于游戏即将完成,它需要分配重构。正如我所说,我尝试使用多个 SpriteBatches,但无论出于何种原因,这也不起作用。

由于这篇文章已经很长了,我将在另一个帖子中询问我的第二期。

【问题讨论】:

  • 您在使用 Stage 吗?然后您可以创建另一个舞台或将内容添加到您的舞台的窗口。
  • 我实际上就 Scene2D 的东西(Stage 所基于的)联系了 Mario(在主要的 LibGDX 开发人员中),他说我不应该将它用于 UI 的东西,或者非常简单的游戏。但是,这可能是一个想法,也许只是使用一个舞台作为抽屉。我会调查的。
  • 我认为此时添加舞台会过于复杂。我认为它会起作用,但它需要分配重构。我在谷歌代码上找到了一个 LibGDX 的待办事项列表,他们已经为精灵添加了 z 顺序。它在 MUTS for 0.9 列表中。不要以为它已经完成了。
  • 是的,如果您还没有使用它,请不要现在添加阶段。我的建议只是“如果”你正在使用阶段。
  • 是的,我确实考虑过,这听起来像是我需要的,但马里奥说它对于完整的游戏来说不够强大。

标签: android libgdx


【解决方案1】:

我想通了。我从 LibGDX 向 Mario 发送了一条消息,他建议我在渲染对象之前对它们进行排序。我真的不知道该怎么做,因为它在一棵树上,我知道如何对一棵树进行排序,但排序不存在。我为层添加了一个字段,并使 GameObject 类实现了 Comparable,然后,在访问者模式接受方法中,我根据它们的层对所有节点子节点进行排序。它现在运行良好。

【讨论】:

  • 请注意,如果您有大量小对象,这可能会对性能产生巨大影响。
猜你喜欢
  • 2014-10-28
  • 2011-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-03
相关资源
最近更新 更多