2014-02-11 4 views
6

Какой эффект addChild и zPosition действительно имеют на сцене?SpriteKit не уважает 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.

Я пропустил что-то?

+1

больше код пожалуйста ... –

+0

нет больше код. Код такой. 3 слоя с 3 различными zPosition, но добавляются в случайном порядке. SpriteKit должен уважать zPosition, но это не так. – SpaceDog

+0

Попробуйте установить zPosition после addChild вместо ранее. – user688518

ответ

8

Если у них один и тот же родитель, который был бы правдой. В случае, если они могут быть разными родителями, порядок родителей также учитывается.

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

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

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

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

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

+0

что будет? 321 или 132? Spritekit игнорирует zPosition и делает его 321. – SpaceDog

+0

123 должен быть результатом. Как предложил Джером, нам нужен больше кода, чтобы предложить лучший ответ. –

+0

123? вы имеете в виду 1 сверху или снизу? поэтому имеет значение порядок addChild, а не zPosition. – SpaceDog

4

В контроллере вид игры, установите свойство ignoresSiblingOrder ложь (или NO в Objective-C).

let skView = self.view as SKView 
skView.ignoresSiblingOrder = false 
+0

спасибо !!!!!!!!!!! – SpaceDog

+0

И в коде вы все еще устанавливаете истину/ДА? – Jonny

Смежные вопросы