我想用cocos2D製作等距的,基於瓦片的iPhone遊戲。基於瓷磚的cocos2D-iPhone遊戲的最佳Z排序方法?
精靈需要繪製在其他「精靈」後面的精靈上。我正在尋找最好的方法來做到這一點。
我想避免畫家的算法,因爲它涉及到每個幀都是昂貴的所有精靈分類。
Z緩衝算法由GPU和cocos2D支持,所以這就是我想使用的,但有一個問題。有些精靈,比如建築物,會佔用多個瓦片。給這些精靈分配一個Z值是很困難的。
這些是我想過的選項:
- 比較兩個建築物,並確定哪一個是「在前方」是 容易。因此,可以對建築物進行排序,然後根據排序順序爲 分配Z值。這與畫家的算法不會有任何不同。 OpenGl ES Z緩衝區不是必需的。
- 僅根據地圖上的 地圖(不知道其他建築物在哪裏)爲每個建築物分配Z值。我是 找到這個困難。我認爲這是可能的,但我不是 能夠拿出一個公式呢。
- 對於佔用多個貼圖的圖像使用多個精靈,所以所有精靈的尺寸將會完全相同。 Z訂單然後可以根據精靈正在佔據的區塊而容易地分配 。該解決方案的 問題在於它使得遊戲邏輯更加複雜。對於建築物構成的每個精靈來說,對單個建築物的所有操作都必須重複 。我想 將每個對象視爲一個單一的實體。
- 修改cocos2D代碼以允許精靈在不同點處具有多個Z值 。如果一個精靈可以有多個基於 的Z值,精靈的一個特定部分將落在哪個區域,那麼計算該區域的Z值很容易。我不需要將 精靈與任何其他精靈進行比較。我相信通過爲每個精靈使用多個四邊形可以使用 。這個問題在於它對我來說有點複雜,因爲我對OpenGL ES和cocos2D不熟悉。 I 並不完全瞭解所有內部數據結構 是如何工作的。儘管如果找不到公式 ,它似乎是最優雅的解決方案。
我將對任何建議或對有用資源的引用進行投票。
我不明白爲什麼建築物的單個z值應該失敗。但是,我們並不知道你以後的確切視覺效果。 –
搜索cc_vertexz ...基本上需要使用cocos2d的ISO映射 – LearnCocos2D
@Bael,具有單個z值的建築物不會失敗。問題是沒有對所有精靈進行排序就得到了z值。如果我要將它們全部排序,那麼我可以使用畫家的算法,而且我不需要OpenGL Z緩衝區。如果建築物被分成較小的部分,那麼爲每個部分分配一個z值很容易。它只是從底部的距離。我不需要知道其他精靈的位置。 – Jay