2016-06-03 18 views
1

Jedes Mal, wenn ich mein Projekt laufen lasse, erhalte ich eine schlechte Anweisung Fehler auf der Linie ...SpriteKit Auswickeln Optional Error (Swift)

ground.physicsBody!.dynamic = false 

Hier wird der vollständige Code ist ich mit diesem Code-Schnipsel gehen leite. Ich bin mir nicht sicher, was passiert und ich habe nicht viel Erfahrung mit Optionen.

Code:

var ground = SKSpriteNode() 
ground.position = CGPointMake(0, 0) 
ground.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(self.frame.size.width, 30)) 
let groundTexture = SKTexture(imageNamed: "Red.png") 
ground = SKSpriteNode(texture: groundTexture) 
ground.physicsBody!.dynamic = false 
ground.physicsBody?.allowsRotation = false 

ground.physicsBody!.categoryBitMask = ColliderType.Object.rawValue 
ground.physicsBody!.contactTestBitMask = ColliderType.Object.rawValue 
ground.physicsBody!.collisionBitMask = ColliderType.Object.rawValue 
self.addChild(ground) 

Antwort

5

Sie sind re Initialisierung ground nach seiner Physik Körper zu schaffen und damit das neue Objekt Physik Körper nicht so haben die Null-Fehler zeigt.

Code ändern zu

let groundTexture = SKTexture(imageNamed: "Red.png") 
var ground = SKSpriteNode(texture: groundTexture) 
ground.position = CGPointMake(0, 0) 
ground.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(self.frame.size.width, 30)) 
ground.physicsBody!.dynamic = false 
ground.physicsBody?.allowsRotation = false 

ground.physicsBody!.categoryBitMask = ColliderType.Object.rawValue 
ground.physicsBody!.contactTestBitMask = ColliderType.Object.rawValue 
ground.physicsBody!.collisionBitMask = ColliderType.Object.rawValue 
self.addChild(ground) 

Gemäß dem Kommentar, allgemeine Praxis, wenn Sie den Fehler von gefunden nil Gesicht, wenn optionals ist Abwickeln entweder ? oder eine if let, um sicher un wickeln zu verwenden. In diesem Szenario kann es wie

if let physicsBodyObject = ground.physicsBody { 
    physicsBodyObject.dynamic = false 
    physicsBodyObject.allowsRotation = false 
    //other code 
} 
+1

implementiert werden Ihre Antwort ist korrekt, aber ich würde vorschlagen, dass Sie ein paar leichte Verbesserungen für zukünftige Leser machen. Um Stürze an erster Stelle zu vermeiden, sollten Sie alle ersetzen! mit? wenn möglich. Nicht die beste Übung um Unwrap zu erzwingen, obwohl du weißt, dass der Physikkörper da ist. – crashoverride777

+1

Oder noch besser, einfach den Physikkörper separat erstellen und dann nach der Konfiguration dem Knoten zuweisen. – Hamish