SpriteKit didEndContact не вызывается

В моем методе didEndContact: я увеличиваю "currentScore".

По какой-то причине didEndContact: не вызывается, и, следовательно, "currentScore" не увеличивается. Любые идеи, почему или что я должен искать, чтобы отладить это?

func didEndContact(contact: SKPhysicsContact) {
    guard goal!.barEnabled else { return }
    score += 1
}

Вот связанный код, дайте мне знать, если я могу добавить какие-либо другие полезные детали:

var barEnabled:Bool {
    set {
        bar?.physicsBody?.collisionBitMask = newValue ? CollisionMask.Puck : CollisionMask.None
        bar?.physicsBody?.categoryBitMask = newValue ? CollisionMask.Goal : CollisionMask.None
    }
    get {
        return bar?.physicsBody?.collisionBitMask == CollisionMask.Puck
    }
}

person SRMR    schedule 20.10.2016    source источник
comment
Вы удаляете спрайт со сцены до того, как произойдет didEndContact? Потому что тогда его не вызовут   -  person Knight0fDragon    schedule 24.10.2016
comment
@Knight0fDragon да, я проверил это из-за этого: >stackoverflow.com/questions/29331799/ , но спасибо за двойную проверку со мной   -  person SRMR    schedule 24.10.2016


Ответы (1)


Чтобы обнаруживать коллизии, вам нужно установить contactTestBitMask из physicsBody.

contactTestBitMask в physicsBodys и categoryBitMask в другом physicsBodys не должны быть равны 0, когда двоичная операция И применяется к двум целым числам, чтобы обнаружение сработало.

Если вы еще этого не сделали, убедитесь, что physicsWorld.contactDelegate сцены установлено на self и что она реализует SKPhysicsContactDelegate.

person Christoph    schedule 20.10.2016
comment
Дважды проверил, что у меня есть physicsWorld.contactDelegate = self, а также что сцена реализует SKPhysicsContactDelegate, так что все выглядит хорошо, и спасибо за объяснение обнаружения коллизий, чтобы я мог проверить, что я также выполнял части битовой маски. - person SRMR; 20.10.2016
comment
Мне нужно немного больше контекста, чтобы понять, почему он все еще не работает. - person Christoph; 22.10.2016
comment
Теперь у меня это заработало, поэтому я отметил ответ, но забыл добавить комментарий. Большое спасибо! - person SRMR; 22.10.2016