2016-03-30 15 views
0

Ich möchte einfach 'didSimulatePhysics()' einprogrammieren, damit der Hai in die entgegengesetzte Richtung geht, wenn er das Ende des Bildschirms erreicht. Aber ich kann nicht Swift bekommen, den Hai zu finden, wenn ich versuche, es zu benutzen in dem 'didSimulatePhysics()'Siehe Objekt in einer anderen Klasse

GameElementsClass:

import SpriteKit 

extension GameScene { 

    func createSharkAtPosition (position:CGPoint, ofType type:SharkType) -> SharkNode { 

     let node = SharkNode() 
     let position = CGPoint(x: position.x * scaleFactor, y: position.y) 
     node.position = position 
     node.name = "SHARKNODE" 
     node.sharkType = type 
     var sprite:SKSpriteNode 


     sprite = SKSpriteNode(imageNamed: "shark1") 

     node.addChild(sprite) 

     node.physicsBody = SKPhysicsBody(rectangleOfSize: sprite.size) 
     node.physicsBody?.dynamic = true 
     node.physicsBody?.affectedByGravity = false 
     node.physicsBody?.velocity.dx = CGFloat(-60) 

     node.physicsBody?.categoryBitMask = CollisionBitMask.Shark 
     node.physicsBody?.collisionBitMask = 0 


     return node 
    } 
} 

GameSceneClass:

func sharkMaker() { 
    let randomXPos = arc4random_uniform(170) + 10 
    let yPosition = CGRectGetMidY(self.frame) + 200 * CGFloat(counter) 
    counter += 1 
    let shark = createSharkAtPosition(CGPoint(x: CGFloat(randomXPos), y: yPosition - 180), ofType: SharkType.normalShark) 
    foreground.addChild(shark) 

} 


override func didSimulatePhysics() { 

    if node.position.x < -10 { 
     node.xScale = -1 
     node.physicsBody?.velocity.dx = CGFloat(50) 
    }else if (node.position.x > self.size.width + 10) { 
     node.xScale = 1 
     node.physicsBody?.velocity.dx = CGFloat(-50) 
    } 
+0

Sie sollten Ihren Hai aus Ihrer Spieleszene erstellen. – Max

+0

möchte den Code unten in didSimulatePhysics() hinzufügen. aber ich kann nicht scheinen, um es zu arbeiten, 'wenn player.position.x <-10 { shark.xScale = shark.xScale * -1 shark.physicsBody? .velocity.dx = CGFloat (60) } else if (player.position.x> self.size.width + 10) { shark.xScale = shark.xScale shark.physicsBody? .velocity.dx = CGFloat (-60) } ' – rkoi95

+1

Sie brauchen [bearbeiten Sie Ihre Frage ] (http://stackoverflow.com/posts/36320205/edit). Im Moment ist es unklar. Wir haben nur eine vage Beschreibung von dem, was Sie versuchen zu tun. Sie haben kein [MCVE] (http://stackoverflow.com/help/mcve) erstellt. Ein wenig über [objektorientierte Programmierung] zu lernen (http://importblogkit.com/2015/04/programming-objectively/) wird einen langen Weg zurücklegen. – nhgrif

Antwort

0

Der shark Variable ist lokal sharkMaker, ich nehme an, Ihr Code nicht kompilieren, oder? Verwende entweder eine Eigenschaft, um den Hai zu speichern, oder nenne ihn shark.name="Sharky" and then use. Lass hai = childNodeByName ("Sharky") `, um ihn irgendwo in deiner Hierarchie zu finden.

+0

Habe die 'didSimulatePhysics()' noch einmal bearbeitet. shark = Knoten in diesem Fall. Ich möchte in der Lage sein, den Knoten außerhalb der 'GameElementsClass' zu verwenden und ihn in 'didSimulatePhysics' zu verwenden. Einstellung 'node.name = "Sharky"' und dann in 'GameElementsClass' verwenden scheint nicht zu funktionieren, passiert nichts. Irgendwelche anderen Vorschläge? Danke – rkoi95

+0

Wie bereits gesagt, haben wir keinen Code, um Sie mehr auf diesem zu führen ... –

Verwandte Themen