2012-08-06 180 views
3

我正在将iOS和Windows Phone游戏移植到Android。我对端口的大部分代码都来自Windows Phone版本,仅仅因为它与Java最为相似。我的问题涉及LibGDX中的OrthographicCamera类。LibGDX纹理渲染顺序

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

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

由于这已经是一篇很长的文章,我会在另一篇文章中提出我的第二个问题。

+0

你在使用Stage吗?然后,您可以创建另一个舞台或向舞台添加东西到窗口。 – Matsemann 2012-08-07 10:26:11

+0

我实际上联系了Mario(领导LibGDX开发者)关于Scene2D的东西(这个阶段是建立在这个基础上的),他说我不应该将它用于UI以外的任何东西,或者是一个非常简单的游戏。但是,这可能是一个想法,也许只是为抽屉使用舞台。我会研究这一点。 – weaverx9x9 2012-08-07 12:55:47

+0

我认为在这一点上添加舞台会过于复杂。我认为它会工作,但它需要分配重构。我在google代码中找到了LibGDX的todo列表,并且他们添加了z-order到sprites。它在MUSTS 0.9列表中。不要认为它已经完成。 – weaverx9x9 2012-08-07 13:05:00

回答

5

我想通了。我从LibGDX给Mario发送了一条消息,他建议我在渲染对象之前对它们进行排序。我不确定如何做到这一点,因为它在树上,我知道如何对树进行排序,但排序不在那里。我为图层添加了一个字段,并使GameObject类实现了Comparable,然后,在访问者模式accept方法中,我根据图层对所有节点子节点进行排序。它现在正在完美工作。

+1

如果您有大量小物体,请小心这可能会有巨大的性能影响。 – 2014-12-30 09:34:34