2016-04-21 3 views
1

aufgerufen werden Ich habe mit einer einfachen Szene getestet.SpriteKits didBeginContact kann nicht

Func didBeginContact kann nicht aufgerufen werden.

Ich habe versucht, collisionBitMask und s1.physicsBody = SKPhysicsBody(circleOfRadius: 100) zu verwenden. Das Problem war hartnäckig.

Was kann ich tun, um es zu beheben?

import SpriteKit 

class Test2Scene: SKScene, SKPhysicsContactDelegate { 
    override func didMoveToView(view: SKView) { 
     physicsWorld.contactDelegate = self 
     physicsWorld.speed = 0 


     let s1 = SKSpriteNode(imageNamed: kImagePlayer) 
     s1.position = CGPointMake(100, 100) 
     s1.physicsBody = SKPhysicsBody(rectangleOfSize: s1.size) 
     s1.physicsBody?.categoryBitMask = 1 
     s1.physicsBody?.contactTestBitMask = 2 
     //s1.physicsBody?.collisionBitMask = 2 
     self.addChild(s1) 


     let s2 = SKSpriteNode(imageNamed: kImagePlayer) 
     s2.position = CGPointMake(100, 500); 
     s2.runAction(SKAction.moveToY(0, duration: 1)) 
     s2.physicsBody = SKPhysicsBody(rectangleOfSize: s2.size) 
     s2.physicsBody?.categoryBitMask = 2 
     //s2.physicsBody?.collisionBitMask = 1 
     self.addChild(s2); 

     print("view did load") 
    } 

    func didBeginContact(contact: SKPhysicsContact) { 
     print("aaa") 
    } 
    func didEndContact(contact: SKPhysicsContact) { 
     print("bbb") 
    } 
} 
+0

Und einige Sachen über die Implementierung von Kontakterkennung innerhalb von 'didBeginContact' Methode verwenden müssen: http://stackoverflow.com/a/36246855/3402095, http://stackoverflow.com/a/27389834/3402095, http://StackOverflow.com/a/20604762/3402095 – Whirlwind

Antwort

0

Finden Sie den Grund heraus.

s1.physicsBody!.dynamic = true 
s2.physicsBody!.dynamic = true 
+0

Das war nicht der Grund (zumindest für den angegebenen Code), weil die Eigenschaft 'dynamic' standardmäßig auf https://developer.apple.com/library gesetzt ist/ios/documentation/SpriteKit/Referenz/SKPhysicsBody_Ref/# // apple_ref/occ/instp/SKPhysicsBody/dynamic – Whirlwind

1

Ihr Code ist so ziemlich alles falsch, aber Ihr Täter ist:

physicsWorld.speed = 0 

Aus der Dokumentation:

Der Standardwert 1,0, was bedeutet, dass die Simulation in Normal läuft Geschwindigkeit. Ein anderer Wert als der Standardwert ändert die Geschwindigkeit, zu der in der Physiksimulation passiert. Zum Beispiel gibt ein Geschwindigkeitswert von 2.0 an, dass die Zeit in der Physiksimulation doppelt so schnell wie die Simulationszeit der Szene passiert. Ein Wert von 0.0 pausiert die Physik Simulation.

Wenn Sie den Wert auf 0,0 setzen, wird die Simulation angehalten. Das zweite Problem ist, dass Ihre Knoten von der Schwerkraft beeinflusst werden, aber Sie verschieben sie mit SKAction. Auf diese Weise ziehen Sie den Knoten aus der Physiksimulation heraus und Sie können seltsame Verhaltensweisen erfahren.

Auch würde ich empfehlen zu lesen this great StackOverflow post über Bitmasken und wie sie funktionieren/sollte verwendet werden.