SpriteKit не уважает zPosition?
Какой эффект на сцене оказывают addChild и zPosition?
Я имею в виду это: предположим, я делаю это
sprite1.zPosition = 50;
sprite2.zPosition = 10;
sprite3.zPosition = 30;
а позже сделай это
[self addChild:sprite1];
[self addChild:sprite2];
[self addChild:sprite3];
согласно SpriteKit и с учетом порядка zPosition, sprite1 должен отображаться поверх sprite3 поверх sprite2, но spriteKit игнорирует это и отображает 3 над 2 над 1.
я что-то пропустил?
2 ответа
Если у них один и тот же родитель, это будет правдой. В случае, если они могут разных родителей, Z порядок родителей также принимается во внимание.
Стандартное поведение рендеринга сцены следует простой паре правил:
- Родитель рисует его содержимое перед отображением его потомков.
- Дочерние элементы отображаются в том порядке, в котором они отображаются в дочернем массиве.
Когда вы учитываете z позиции, вот как рендерится дерево узлов:
- Глобальная позиция z каждого узла вычисляется.
- Узлы отрисовываются в порядке от наименьшего значения z к наибольшему значению z.
- Если два узла имеют одно и то же значение z, сначала отображаются предки, а потомки отображаются в дочернем порядке.
Вы можете найти это хорошо объясненным здесь в разделе Понимание порядка рисования для дерева узлов
В контроллере вида игры установите для свойства ignoresSiblingOrder значение false (или значение NO в target-C).
let skView = self.view as SKView
skView.ignoresSiblingOrder = false