Подтвердить что ты не робот

Sprite-Kit: Sprite z-Order

Как изменить Sprite z-Order в Sprite-Kit?

Код Cocos2d:

[parentNode addChild:sprite1 z:3];
[parentNode addChild:sprite2 z:2];
[parentNode addChild:sprite3 z:1];

Я попробовал под кодом в Sprite-Kit.. но его не меняя z-порядок

[parentNode insertChild:sprite1 atIndex:3];
[parentNode insertChild:sprite2 atIndex:2];
4b9b3361

Ответ 1

Для порядка рисования используйте zPosition свойство node:

zPosition Высота node относительно его родителя.

Значение по умолчанию 0.0. Положительная ось z проецируется к средству просмотра, так что узлы с большими значениями z ближе к средству просмотра. Когда дерево nodeрендеринг, высота каждого node (в абсолютных координатах) равна вычисляется, а затем все узлы в дереве отображаются с наименьшего z значение к наибольшему значению z. Если несколько узлов имеют одну и ту же позицию z, эти узлы сортируются так, чтобы родительские узлы были дети и братья и сестры оказываются в том порядке, в котором они появляются их родители детей. Хит-тестирование обрабатывается в противоположный порядок.

Свойства класса SKView ignoresSiblingOrder определяют, будет ли nodeсортировка разрешена для узлов в той же позиции z.

Вы также можете использовать insertChild:atIndex: для изменения порядка z, но имейте в виду, что индекс является индексом объекта в массиве, а не zPosition (т.е. параметр atIndex не совпадает с параметром z параметр в cocos2d, на самом деле он обратный). Узлы, добавленные с более низким индексом, будут нарисованы перед узлами с более высоким индексом.

Также обратите внимание, что вы не можете вставлять узлы по индексу за пределы. Из Документов NSMutableArray:

[..] вы не можете вставить объект с индексом, большим, чем текущий счетчик массива. Например, если массив содержит два объектов, его размер равен 2, поэтому вы можете добавлять объекты по индексам 0, 1 или 2. Индекс 3 является незаконным и запредельным; если вы попытаетесь добавить объект в индекс 3 (когда размер массива равен 2), NSMutableArray повышает исключение.

Ответ 2

В Swift вы можете:

sprite.zPosition = 1

Обычно zOrder является , чтобы сделать пример:

-1 (положите его обратно)

0 (в середине это также значение по умолчанию)

1 (поставьте его перед всеми)

Когда все ваши объекты имеют одинаковые zPosition (например, по умолчанию 0.0), и они добавляются к одному и тому же родительскому node, порядку, они появляются определяется кодом <<22 > в вашем коде: последнее находится перед всеми.

Ответ 3

Я всегда использую просто:

sprite.zPosition = 13;  

Если я хочу, чтобы это было на zPosition 13. Чем выше значение zPosition, тем ближе спрайт к пользователю, и он будет отображаться и отображаться поверх спрайтов с меньшим zPosition.

Ответ 4

Как говорили другие, нам принадлежит свойство node zPosition. Но если вы не хотите отслеживать все различные zPositions всех узлов в вашей сцене, вы можете поставить Sprite на относительную глубину в другую, например:

newSprite.zPosition = anotherSprite.zPosition + 1

поставить newSprite только перед другимSprite. Я также сохраняю 100 и -100 для спрайтов, которые должны быть прямо на передней или задней панели и т.д., Независимо от того, что также находится на сцене.