「Tiled」アプリで作成したTMXマップを多用した見下ろし型シューティングゲームを作っています。私の TMX マップ内には、フロア タイルを含む「背景」レイヤーがあり、キャラクター (CCSprites) の下に表示されます。
TMX ファイルに「フォアグラウンド」と呼ばれる別のレイヤーがあり、これを CCSprite の「上」に表示して、さまざまなオブジェクトの下を歩いているような錯覚を与えます。
これを行うために、CCNode クラスの vertexZ プロパティを使用してみました。
CCTMXLayer *backgroundLayer = ...
CCSprite *spriteNode = ...
CCTMXLayer *foregroundLayer = ...
[backgroundLayer setVertexZ:1];
[spriteNode setVertexZ:2];
[foregroundLayer setVertexZ:3];
...しかし、実際には vertexZ がopenGL ビュー内のノードの外観を変更することがわかりました。vertexZ の値が大きいほど、効果的に CCNode が大きく表示されたり、ユーザーの近くに表示されたりします。私はそれを望んでいません-私が望むのは、レイヤー間の視覚的な違いのない、ありえないほど薄いケーキ効果のようなレイヤーだけです.
そこで、ノードの zOrder プロパティを次のように変更してみようと思いました。
[[backgroundLayer parent] reOrderChild:backgroundLayer z:1];
[[spriteNode parent] reOrderChild:backgroundLayer z:2];
[[foregroundLayer parent] reOrderChild:backgroundLayer z:3];
しかし、spriteNode は CCScene の直接の子ですが、背景ノードと前景ノードはどちらも CCTMXTiledMap の子であり、それ自体が CCScene の子であるため、ここで行っていることには根本的な問題があることに気付きました。
基本的に、マップの 2 つのレイヤーの間に CCSprite を挿入しようとしていますが、CCScene の観点から見ると、実際には同じレイヤーの 2 つの部分にすぎません。
前景レイヤーを保持するためだけに CCTMXTiledMap の追加インスタンスを作成できるようですが、それもやり過ぎのようです。私の他の考えは、同じ目的を果たすために CCSprites を作成することでしたが、もっと良い方法が必要なようです。