SpriteKit позиция спрайта внутри дерева узлов - PullRequest
0 голосов
/ 26 сентября 2019

В настоящее время работаю над простой 2D игрой, где у меня есть персонаж игрока, который разбит на несколько спрайтов (голова, торс, ноги, руки, ...).У меня есть абсолютные координаты прямо в Aseprite (если я беру индивидуальный спрайт и позиционирую их, я получаю правильные координаты).

Когда я все делаю быстро и использую отрицательный y вместо положительного, все становится совершенно странным.Например, в Aseprite у меня есть следующие координаты: голова (30, 17), туловище (30, 24) и ноги (28, 35).Все выравнивается идеально.

В SpriteKit я расширяю класс SKNode и помещаю все субприты внутри, используя только отрицательное число для y.Поэтому вместо того, чтобы идти вверх, я опускаюсь.Похоже, что координаты в пикселях неверны - спрайты отключены на несколько пикселей.В основном это не координата y, но в некоторых случаях (вращение символа) также x.

Как из этих абсолютных верхних левых координат получить правильные координаты SpriteKit?

1 Ответ

0 голосов
/ 28 сентября 2019

Хорошо, я понял, что было неправильно (несколько вещей):

  • ваш родительский класс может быть SKNode, но дети должны установить точку привязки в (0,1)
  • при изменении текстуры дочернего спрайта всегда убедитесь, что размер спрайта установлен на новый размер текстуры.Если нет, он будет использовать предыдущий размер текстуры и изменить размер новой текстуры до старого.Это создает дополнительные проблемы с позиционированием.Поэтому вы должны вызвать: child.size = child.texture! .Size () (я использовал принудительное развертывание, потому что я установил (новую) текстуру на шаг раньше, поэтому я на 100% уверен, что она существует.
  • , когдаПри установке новой текстуры снова установите точку привязки (кажется, она сбрасывается при изменении текстуры дочернего спрайта).
...