func didBeginContact(contact: SKPhysicsContact) {
if (contact.bodyA.categoryBitMask & BodyType.shield.rawValue) == BodyType.shield.rawValue {
contact.bodyB.node?.removeFromParent()
counter++
println(counter)
} else if (contact.bodyB.categoryBitMask & BodyType.shield.rawValue) == BodyType.shield.rawValue {
contact.bodyA.node?.removeFromParent()
counter++
println(counter)
}
}
Одна физика тела из текстуры shield.physicsBody = SKPhysicsBody(texture: shieldTexture, size: shieldTexture.size())
didBeginContact вызывается несколько раз для одной и той же SKPhysicsBody
другой из круга sand.physicsBody = SKPhysicsBody(circleOfRadius: sand.size.width/2)
Когда буксировочный объекты контакт друг друга иногда sand.physicsBody = SKPhysicsBody(circleOfRadius: sand.size.width/2)
вызывается много раз. Как получить его, чтобы получить вызов только один раз для каждого объекта, даже если я удалю его из родителя, как только он свяжется.
Я считаю, что это работает так, как предполагалось, поскольку тело из текстуры может генерировать несколько форм внутри, каждый из которых может вызвать контактное событие. Удаление узла не удаляет тело до тех пор, пока не закончится шаг симуляции физики. Вы должны вручную «маркировать» узел или тело как обработанные в этом событии контакта, чтобы вы могли пропустить любые последующие события контакта с теми же телами. – LearnCocos2D
Хотелось бы, чтобы SKPhysicsBody из текстуры выбрал параметр, чтобы он соответствовал параметру, поэтому он ведет себя точно так же, как например. SKPhysicsBody от circleOfRadius, поэтому он подсчитывает ТОЛЬКО 1 удар/контакт, как в некоторых случаях, что было бы очень желательно, чем создание какой-либо дополнительной логики, включая ответ ниже. Кроме того, он может сэкономить ресурсы, чтобы не обнаруживать больше контактов, если они не нужны. –