Задержка определения положения спрайта - PullRequest
0 голосов
/ 27 октября 2018

Я пытаюсь точно определить точку, в которой узел, движущийся со скоростью, попадает в самый край экрана. В данный момент позиция узла регистрируется позже, за краем экрана (и тем более при движении быстрее) при проверке, находится ли его положение от >= до self.frame.maxX (использование == вообще не регистрируется).

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

Однако оба подхода кажутся проблематичными. Из того, что я прочитал, update называется максимум 60 раз в секунду, поэтому между кадрами позиция узла регистрируется позже.

По той же причине, я полагаю, обнаружение столкновений с использованием didBegin страдает той же проблемой, и даже когда физическое тело имеет свой collisionBitMask, не установленный в ноль, то есть даже когда узел отскакивает от него.

И проверка положения в пользовательской функции, вызываемой таймером с интервалом времени, скажем, 0,00001, также не точна.

В нынешнем виде нет приемлемой реализации - как я могу точно проверить положение?

1 Ответ

0 голосов
/ 03 ноября 2018

SKPhysicsBody не такой точный и иногда немного глючный, вы можете попробовать использовать это в функции didBegin .Это всегда помогало мне, может быть, это будет работать и для вас.

if contact.contactPoint.x >= self.frame.maxX - 5 { 
    //do something
}
if contact.contactPoint.x <= self.frame.minX + 5{
    //do something

Я не знаю, что вы подразумеваете под "путешествовать быстрее" , в этом примере не было проблем с регистрациейскорость чуть меньше 400, что довольно быстро.

...