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)
}
}
Ein Physik Körper ist aus einer Textur namens shield.physicsBody = SKPhysicsBody(texture: shieldTexture, size: shieldTexture.size())
didBeginContact wird mehrmals für die gleiche SKPhysicsBody
die andere aus einem Kreis ist sand.physicsBody = SKPhysicsBody(circleOfRadius: sand.size.width/2)
Wenn der Abschleppwagen-Kontaktobjekte einander manchmal sand.physicsBody = SKPhysicsBody(circleOfRadius: sand.size.width/2)
aufgerufen wird mehrmals. Wie bekomme ich es nur für jedes Objekt einmal aufgerufen werden, obwohl ich es aus dem Eltern entfernen, sobald es kontaktiert.
Ich glaube, dies funktioniert wie vorgesehen, da Körper von Textur mehrere Formen intern erzeugen kann, jedes kann ein Kontakt Ereignis verursachen. Durch Entfernen des Knotens wird der Körper erst nach Abschluss des Physiksimulationsschritts entfernt. Sie müssen den Knoten oder den Körper in diesem Kontakt-Ereignis manuell als "markiert" markieren, so dass Sie nachfolgende Kontakt-Ereignisse desselben Körpers überspringen können. – LearnCocos2D
Ich wünschte, es gäbe eine Option für SKPhysicsBody von Textur, um es durch Parameter zu setzen, so dass es genau wie z. SKPhysicsBody von circleOfRadius zählt also NUR 1 Treffer/Kontakt, da dies in manchen Fällen sehr wünschenswert wäre, als eine zusätzliche Logik zu erstellen, einschließlich der folgenden Antwort. Außerdem könnte es Ressourcen sparen, um nicht mehr Kontakte zu erkennen, wenn sie nicht benötigt werden. –