По моему опыту, экранные координаты, заданные функцией projectPoint
ARKit, могут непосредственно использоваться при рисовании, например, в CALayer
. Это означает, что они следуют координатам iOS, как описано здесь , где начало координат находится в верхнем левом углу, а y инвертировано.
SpriteKit имеет свою собственную систему координат :
Система координат единицы размещает начало координат в нижнем левом углу рамки и (1,1) в верхнем правом углу рамки. По умолчанию точка привязки спрайта равна (0,5,0,5), что соответствует центру кадра.
Наконец, SKNodes помещаются в SKScene, источник которого находится слева внизу. Вы должны убедиться, что ваш SKScene имеет тот же размер, что и ваш фактический вид, иначе источник может быть не в левом нижнем углу вида, и, таким образом, ваше расположение узла по координатам представления может быть неверным. Ответ на этот вопрос может помочь, в частности, проверка AspectFit или AspectFill вашего представления, чтобы убедиться, что ваша сцена сокращается.
Источник сцены находится внизу слева и, в зависимости от размера сцены и ее масштабирования, может находиться за пределами экрана. Это где 0,0. Таким образом, каждый ребенок, которого вы добавите, начнет там и будет работать правильно и в зависимости от положения. SKSpriteNode имеет свое происхождение в центре.
Таким образом, два основных шага для преобразования из координат вида и координат SpriteKit будут: 1) инвертировать ось Y, чтобы исходная точка находилась слева внизу, и 2) убедиться, что ваш кадр SKScene соответствует вашему кадру обзора.
Я могу немного подробнее проверить это и отредактировать, если возникнут проблемы