2016-06-20 7 views
0

Ich habe Probleme mit der Arbeit mit SKNode -s als" Container ", der verschiedene Sprites hat. Ich möchte es auf diese Art und Weise tun, weil ich nur dieses ganze bewegen kann, anstatt jede Komponente von selbst zu bewegen. Ich würde mich freuen, wenn jemand erklären könnte, was ich falsch mache. Hier ist ein Beispiel, wo ich alles entfernt habe, was keine Fehler verursacht und nur den Teil übriggelassen hat, der einen Fehler verursacht.Verwenden von `SKNode` als" Weltcontainer "Auslösen von NSException

class GameScene: SKScene { 
    let jumper = SKSpriteNode(imageNamed: "doodler.png") 
    let brick = SKSpriteNode(imageNamed: "brick.png") 
    let worldNode = SKNode() 

    override func didMoveToView(view: SKView) { 
     addChild(worldNode) 
     setupBricks() 
    } 

    func addBrick() { 
     let randomX = random(min: size.width*0.1, max: size.height*0.9) 
     let randomY = random(min: size.width*0.1, max: size.height*0.9) 
     brick.position = CGPointMake(randomX, randomY) 
     brick.name = "brick" 
     brick.size = CGSizeMake(70, 10) 
     brick.physicsBody = SKPhysicsBody(rectangleOfSize: brick.size) 
     worldNode.addChild(brick) 
    } 

    func setupBricks() { 
     for _ in 0...10 {addBrick()} 
    } 

In einem anderen Spiel hatte ich ein Problem, dass jedes Mal zwei bestimmte Objekte kollidierte, stürzt das Spiel und geben Sie mir den gleichen Fehler, den ich jetzt habe:

libc++abi.dylib: terminating with uncaught exception of type NSException 
+0

Aber wie kann man hinzufügen der Knoten "Ziegelstein" mehr als einmal? Der Fehler "das Kind hat bereits ein Elternteil" erscheint? –

Antwort

1

Versuchen Sie, eine Klasse o Ziegel zu erstellen:

class Brick: SKSpriteNode { 

    init(position:CGPoint) { 
     let texture = SKTexture(imageNamed: "brick.png") 
     super.init(texture: texture, color: nil, size: texture.size()) 
     self.position = position 
     self.physicsBody = SKPhysicsBody(rectangleOfSize: brick.size) 
    } 

und in der Szene:

func addBrick() { 
    let randomX = random(min: size.width*0.1, max: size.height*0.9) 
    let randomY = random(min: size.width*0.1, max: size.height*0.9) 
    let position = CGPointMake(randomX, randomY) 
    let brick = Brick(position)  
    worldNode.addChild(brick) 
} 
0

Irgendwo im Code einfach Sie rufen ein Kind, zum Beispiel einen "Ziegel", der nil ist.

Überprüfen Sie den Code ad schützen mag:

if let nodeToAdd: SKSpriteKit = self.childNodeWithName("brick") { 
    addBrick(nodeToAdd) 
}