Ich versuche herauszufinden, wie die Erkennung von Kollisionen funktioniert, wenn Enums gesetzt werden. Ich habe mehrere verschiedene Knoten, auf denen ich Kollisionen erkennen kann und die funktionieren, aber ich habe sie einfach geflügelt und verstehe nicht, wie ich sie richtig einrichten soll.Schnelles Erkennen von Kollisionen und Setzen von Enums
enum ColliderType: UInt32{
case ship = 1
case object = 2
case fuel = 4
case alien = 8
case torp = 16
}
Dann habe ich jeden Knoten als solche eingerichtet:
mete.physicsBody!.contactTestBitMask = ColliderType.object.rawValue
mete.physicsBody!.categoryBitMask = ColliderType.object.rawValue
mete.physicsBody!.collisionBitMask = ColliderType.object.rawValue
alien.physicsBody!.contactTestBitMask = ColliderType.torp.rawValue
alien.physicsBody!.categoryBitMask = ColliderType.alien.rawValue
alien.physicsBody!.collisionBitMask = ColliderType.alien.rawValue
fuel.physicsBody!.contactTestBitMask = ColliderType.ship.rawValue
fuel.physicsBody!.categoryBitMask = ColliderType.fuel.rawValue
fuel.physicsBody!.collisionBitMask = ColliderType.fuel.rawValue
ship.physicsBody!.contactTestBitMask = ColliderType.object.rawValue
ship.physicsBody!.categoryBitMask = ColliderType.ship.rawValue
ship.physicsBody!.collisionBitMask = ColliderType.ship.rawValue
torpedoNode.physicsBody!.contactTestBitMask = ColliderType.alien.rawValue
torpedoNode.physicsBody!.categoryBitMask = ColliderType.torp.rawValue
torpedoNode.physicsBody!.collisionBitMask = ColliderType.alien.rawValue
Dann eine Kollision zwischen dem Schiff zu erkennen und zu einem mete der folgende Code ist das, was ich verwende:
if contact.bodyA.categoryBitMask == ColliderType.object.rawValue || contact.bodyB.categoryBitMask == ColliderType.object.rawValue
Eine Kollision zwischen dem Schiff und Kraftstoff verwende ich:
if contact.bodyA.categoryBitMask == ColliderType.fuel.rawValue || contact.bodyB.categoryBitMask == ColliderType.fuel.rawValue {
Dann endlich eine Kollision zwischen einem Torpedo und Alien Ich benutze diesen Code:
if contact.bodyA.categoryBitMask == ColliderType.alien.rawValue || contact.bodyB.categoryBitMask == ColliderType.torp.rawValue {
Alles funktioniert perfekt aber ich bin jetzt versuchen, eine Kollision zwischen dem Schiff zu erkennen und zu fremd, und ich kann nicht arbeiten, wie es weiter zu gehen darüber zu tun. Ich muss versuchen, die Logik zu verstehen und diesen Code aufzuräumen.
Was haben Sie als ‚ColliderType‘ ist nur eine Physik Kategorie. Das Festlegen einer Kategorie für die Kollision von Objekten mit dem Objekt collisionBitMask und contactTestBitMask ist nicht wirklich sinnvoll. –
Es gibt viele Antworten hier auf SO, die erklären, woran Sie interessiert sind: http://StackOverflow.com/A/39064710, http://StackOverflow.com/A/31111039 etc ... – Whirlwind
Zuerst kommen Sie mit Ihrem Kopf herum der Unterschied zwischen ** Kontakte ** und ** Kollisionen ** und starten Sie mit der richtigen Terminologie - Sie erkennen keine Kollisionen, Sie erkennen * Kontakte * .- http://StackOverflow.com/documentation/sprite-Kit/6261/sknode-collision/29294/Differenz-zwischen-Kontakten-und-Kollisionen # t = 201703220900020381008 –