didBeginContact не вызывается для быстро движущегося спрайта

У меня есть игра, в которой пользователь перетаскивает мой основной спрайт. Основной спрайт отлично сталкивается с другими спрайтами, за исключением случаев, когда пользователь очень быстро перетаскивает основной спрайт. Иногда, когда главный спрайт движется быстро, физические тела просто проходят сквозь друг друга, и два спрайта внезапно перекрываются. У меня есть точка останова, которая регистрирует количество попаданий в didBeginContact, и она не сработала.

Есть ли предел тому, насколько быстро спрайт может двигаться и по-прежнему покрываться didBeginContact? Разрешаю ли я пользователю перемещать спрайт быстрее, чем игровой цикл может справиться с коллизиями?

Опять же, когда спрайт движется с медленной скоростью, физика работает идеально.


person Siriss    schedule 19.03.2015    source источник
comment
Если ваш спрайт (мяч) движется со скоростью, скажем, x+50, а ваш объект столкновения (стена) имеет ширину всего в 20 раз, то ваш мяч пройдет прямо над вашей стеной за один кадр без столкновения.   -  person sangony    schedule 19.03.2015


Ответы (2)


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

person hamobi    schedule 19.03.2015

попробуйте установить физическое тело с помощью usesPreciseCollisionDetection = YES

person meaholik    schedule 19.03.2015