Ответ 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 повышает исключение.