2016-07-11 10 views
0

Ich arbeite an einem Spiel, bei dem Objekte (Fische) über den Bildschirm bewegt werden, die Sie mit einem anderen Objekt (Haken) fangen müssen hoch und runter bewegen. Sobald die Objekte Kontakt haben, soll die Position des Fisches die gleiche sein wie die des Hakens. Also habe ich Kontakt aufgenommen (was funktioniert, ich bin mir sicher), sagte ich, wenn der Haken und die Fischberührung dazu führen, dass die Fische die gleiche Position einnehmen wie die Haken.Ändern der Position eines Knotens, sobald der Ort bereits festgelegt ist (SpriteKit)

func didBeginContact(contact: SKPhysicsContact) { 

     let firstBody = contact.bodyA 
     let secondBody = contact.bodyB 




    if firstBody.categoryBitMask == physicsCategory.fishHook && secondBody.categoryBitMask == physicsCategory.greenFish || firstBody.categoryBitMask == physicsCategory.greenFish && secondBody.categoryBitMask == physicsCategory.fishHook{ 

       CollisionWithfishHook(firstBody.node as! SKSprit 

    eNode, greenFish: secondBody.node as! SKSpriteNode) 

     } 
    } 

    func CollisionWithfishHook (fishHook: SKSpriteNode, greenFish: SKSpriteNode){ 

     greenFish.position = CGPointMake(fishHook.position.x, fishHook.position.y) 

    } 

Aus irgendeinem Grund, wenn ich es laufe und sie den Kontakt machen passiert nichts. Ich weiß, dass der begonnene Kontakt richtig funktioniert hat, weil, als ich es sagte, um den Fisch zu entfernen, wenn es den Haken berührt, es funktioniert. Das Problem ist, dass ich den Standort des grünen Fisches nicht ändern kann. Warum ist das und was kann ich tun, um es zu beheben?

+0

Sie scheinen davon auszugehen, dass der Greenfish immer der SecondBody ist. Dies ist möglicherweise nicht immer der Fall. –

Antwort

0

Ändern der Position des Fisches in der didBeginContact Methode wird nur die Position des Fisches einmal ändern - der Moment, den der Fisch und der Haken berühren. Sie müssen fortfahren, die Position des Fisches in der update Methode zu aktualisieren.

würde ich eine Klassenvariable in Ihrer GameScene Klasse erstellen fishToUpdate und wenn Sie ‚Haken‘ ein genannt, stellen fishToUpdate = greenFish (or whatever was caught) in Ihrem didBeginContact Methode. Dann, in der update Methode, aktualisieren Sie die Position des Fisches durch fishToUpdate.position = fishHook.position.

+0

Sprechen Sie über das Override-Func-Update? Wenn ja, was muss ich tun? Ich bin verwirrt. Soll ich sagen, ob sich die Objekte berühren, dann ändere die Position oder was? – james