2012-08-06 232 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