2012-01-23 92 views
0

我想用cocos2D製作等距的,基於瓦片的iPhone遊戲。基於瓷磚的cocos2D-iPhone遊戲的最佳Z排序方法?

精靈需要繪製在其他「精靈」後面的精靈上。我正在尋找最好的方法來做到這一點。

我想避免畫家的算法,因爲它涉及到每個幀都是昂貴的所有精靈分類。

Z緩衝算法由GPU和cocos2D支持,所以這就是我想使用的,但有一個問題。有些精靈,比如建築物,會佔用多個瓦片。給這些精靈分配一個Z值是很困難的。

這些是我想過的選項:

  1. 比較兩個建築物,並確定哪一個是「在前方」是 容易。因此,可以對建築物進行排序,然後根據排序順序爲 分配Z值。這與畫家的算法不會有任何不同。 OpenGl ES Z緩衝區不是必需的。
  2. 僅根據地圖上的 地圖(不知道其他建築物在哪裏)爲每個建築物分配Z值。我是 找到這個困難。我認爲這是可能的,但我不是 能夠拿出一個公式呢。
  3. 對於佔用多個貼圖的圖像使用多個精靈,所以所有精靈的尺寸將會完全相同。 Z訂單然後可以根據精靈正在佔據的區塊而容易地分配 。該解決方案的 問題在於它使得遊戲邏輯更加複雜。對於建築物構成的每個精靈來說,對單個建築物的所有操作都必須重複 。我想 將每個對象視爲一個單一的實體。
  4. 修改cocos2D代碼以允許精靈在不同點處具有多個Z值 。如果一個精靈可以有多個基於 的Z值,精靈的一個特定部分將落在哪個區域,那麼計算該區域的Z值很容易。我不需要將 精靈與任何其他精靈進行比較。我相信通過爲每個精靈使用多個四邊形可以使用 。這個問題在於它對我來說有點複雜,因爲我對OpenGL ES和cocos2D不熟悉。 I 並不完全瞭解所有內部數據結構 是如何工作的。儘管如果找不到公式 ,它似乎是最優雅的解決方案。

我將對任何建議或對有用資源的引用進行投票。

+0

我不明白爲什麼建築物的單個z值應該失敗。但是,我們並不知道你以後的確切視覺效果。 –

+0

搜索cc_vertexz ...基本上需要使用cocos2d的ISO映射 – LearnCocos2D

+0

@Bael,具有單個z值的建築物不會失敗。問題是沒有對所有精靈進行排序就得到了z值。如果我要將它們全部排序,那麼我可以使用畫家的算法,而且我不需要OpenGL Z緩衝區。如果建築物被分成較小的部分,那麼爲每個部分分配一個z值很容易。它只是從底部的距離。我不需要知道其他精靈的位置。 – Jay

回答

1

對於#2,您可以計算對象中心的曼哈頓距離,並將該值用作該對象的z值。只要你在地圖上避免很長的對象,比如5x1對象或更糟的對象,它就會工作。但是,如果您確實需要將長對象放置在平鋪地圖中,則不可能通過使用公式設置z值來管理地圖中對象的z順序。

爲了證明這一點:
1.)在地圖上水平放置兩個2x2物體,並在它們之間留下單位塊。
2.)在它們之間放置一個3x1對象。讓我們將2x2對象命名爲A和B,將3x1對象命名爲C.
3.)如果您只是旋轉C(不改變其位置),則A和B的z順序將互換。

- 如果B現在在前面,則由於C的旋轉,B後面的一些對象將位於A的前面。並且知道A和B之前的哪些對象先前會變成前面的成本很高A在C的旋轉之後。