Я делаю нисходящий шутер, который широко использует карты TMX, созданные с помощью приложения "Tiled".В моей карте TMX у меня есть «фоновый» слой с плитками для полов, который появляется под моими персонажами (CCSprites.)
У меня есть еще один слой в файле TMX, который называется «Foreground», который я хотел бы отобразить »выше "мои CCSprites, создавая иллюзию того, что они ходят под различными объектами.
Я попытался использовать свойство vertexZ класса CCNode, чтобы сделать это:
CCTMXLayer *backgroundLayer = ...
CCSprite *spriteNode = ...
CCTMXLayer *foregroundLayer = ...
[backgroundLayer setVertexZ:1];
[spriteNode setVertexZ:2];
[foregroundLayer setVertexZ:3];
... но получаетсяout vertexZ фактически изменяет внешний вид узла в представлении openGL.Это фактически заставляет CCNode казаться больше или ближе к пользователю , когда он имеет более высокое значение vertexZ.Я не хочу этого - все, что я хочу, это что-то вроде эффекта «слоями невозможного тонкого пирога», без каких-либо визуальных различий между слоями.
Так что я решил попробовать изменить zOrderсвойство узлов, например:
[[backgroundLayer parent] reOrderChild:backgroundLayer z:1];
[[spriteNode parent] reOrderChild:backgroundLayer z:2];
[[foregroundLayer parent] reOrderChild:backgroundLayer z:3];
Но я понял, что есть фундаментальная проблема с тем, что я здесь делаю, так как мой spriteNode является прямым потомком CCScene, но узлы фона и переднего плана являютсяоба потомка моего CCTMXTiledMap, который сам является потомком CCScene.
Итак, я в основном пытаюсь вставить CCSprite между двумя слоями карты, которые с точки зрения CCScene на самом деле являются просто двумя частями одного слоя.
Кажется, я мог бы создать дополнительный экземпляр CCTMXTiledMap просто для того, чтобы удерживать слой переднего плана, но это также кажется излишним.Моя другая мысль состояла в том, чтобы создать CCSprites для той же цели, но кажется, что должен быть лучший способ.