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 порядок родителей также принимается во внимание.

Стандартное поведение рендеринга сцены следует простой паре правил:

  1. Родитель рисует его содержимое перед отображением его потомков.
  2. Дочерние элементы отображаются в том порядке, в котором они отображаются в дочернем массиве.

Когда вы учитываете z позиции, вот как рендерится дерево узлов:

  1. Глобальная позиция z каждого узла вычисляется.
  2. Узлы отрисовываются в порядке от наименьшего значения z к наибольшему значению z.
  3. Если два узла имеют одно и то же значение z, сначала отображаются предки, а потомки отображаются в дочернем порядке.

Вы можете найти это хорошо объясненным здесь в разделе Понимание порядка рисования для дерева узлов

В контроллере вида игры установите для свойства ignoresSiblingOrder значение false (или значение NO в target-C).

let skView = self.view as SKView
skView.ignoresSiblingOrder = false
Другие вопросы по тегам