Столкновение обнаружено только один раз - PullRequest
0 голосов
/ 14 января 2019

У меня возникли проблемы со столкновениями в спрайтеките и способе запуска кода. Я использую физический контактный делегат и стандартные битовые маски. Столкновения происходят только между двумя объектами одновременно. Я хочу, чтобы столкновение было обнаружено, а затем выполнить следующий код один раз. К сожалению, между объектами существует контакт в нескольких точках, что приводит к запуску кода более одного раза. Мой код настроен на удаление узла до запуска кода, но я все еще испытываю эту проблему. Как я могу гарантировать, что столкновение будет обнаружено в одной точке или код будет запущен только один раз, заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Да - это происходит. Способ справиться с этим (вы не можете заставить sprite-kit НЕ звонить didBegin несколько раз при некоторых обстоятельствах), чтобы убедиться, что ваш контактный код учитывает это, и что обработка контракта несколько раз не вызывает проблем (например, как добавление к партитуре несколько раз, удаление нескольких жизней, попытка доступа к узлу или физическому телу, которое было удалено и т. д.).

Здесь обсуждается: Sprite-Kit, регистрирующий несколько столкновений для одного контакта

Некоторые вещи, которые вы можете сделать, включают:

  • Если вы удаляете узел, с которым связались, проверьте, является ли он nil, прежде чем Вы удаляете это (для дублирующих контактов)
  • Добавьте узел в набор, а затем удалите все узлы в наборе. didFinishUpdate
  • Добавить «неактивный» флаг к узлу userData
  • Сделать узел подклассом SKSpriteNode и добавить inactive свойство
  • и т. Д.
0 голосов
/ 15 января 2019

Ваш вопрос немного неясен, но я думаю, что у меня могла быть похожая проблема в прошлом.

Вы пытались установить SKPhysicsBody (узла, который вы хотите удалить после столкновения) в ноль? Если это первое, что вы делаете после коллизии, она не регистрирует другие коллизии и выполняет только тот код, который вы настроили, один раз.

...