SpriteKit: определить порядок рисования для проверки удара
Я использую Spritekit и хочу пройти тест на удар, который работает интуитивно. Другими словами: я получил позицию x,y и хочу выяснить, какой самый верхний узел был поражен. (И под "самым верхним" я подразумеваю тот, который пользователь на самом деле считает самым верхним.)
Я не нашел какой-либо предопределенной функциональности SpriteKit, которая дает мне эту функциональность. На самом деле я обнаружил, что сам SpriteKit использует некое интуитивно понятное тестирование попаданий, см. Здесь.
Моя идея реализовать это самостоятельно - рассчитать некоторый глобальный z порядок, как описано в ответе здесь, Доброчудни Тапиром.
Я думаю, что это может сработать, меня смущает утверждение в документации:
Важный: классы узла SKCropNode и SKEffectNode изменяют поведение рендеринга сцены. Дочерние элементы этих узлов отображаются независимо как отдельное дерево узлов, а результаты отображаются в дереве, которое содержит узел кадрирования или эффекта. Для получения дополнительной информации см. Работа с другими типами узлов.
Чтобы найти здесь, под "Понимание порядка рисования для дерева узлов".
Я не нашел упомянутую точку "Работа с другими типами узлов", поэтому я понятия не имею, как и почему SKCropNodes или SKEffectNodes должны изменять порядок рисования...
Так что ответы на следующие вопросы могут помочь мне:
- Предлагает ли SpriteKit некоторую функциональность для извлечения чертежа?
- Если нет, вы думаете, что моя пользовательская реализация работает? (Как узлы Crop или Effect могут его уничтожить?)
- Не могли бы вы указать мне информацию по этому вопросу? Как пропавшая статья "Работа с другими узлами"?
Обновить:
Я только что узнал, что описанное здесь поведение не является правильным.
Как уже упоминалось в комментариях, я указывал на nodeAtPosition или nodeAtPosition. Я использовал здесь код и проверил его.
Результат не удовлетворяет. Две проблемы:
- Заданное zPosition игнорируется в nodeAtPosition. Независимо от того, находится ли синий или красный квадрат впереди, я получаю тот же порядок в массиве, возвращаемом в nodeAtPosition.
- Эти функции используют накопленный кадр. Но в префекте я хотел бы использовать точный размер каждого узла, а не накопленный кадр.
Несколько картинок до 1.: