2015-05-25 21 views
-2

我試圖讓我的精靈在屏幕上某處進行觸摸時獲得脈衝和速度,但我得到錯誤代碼:無法在沒有遊戲崩潰的情況下爲物理物體添加脈衝或速度

fatal error: unexpectedly found nil while unwrapping an Optional value

這迫使我把一個「!」在「物理學家」面前,當我這樣做時,它會崩潰。如果我把「?」衝動和速度是行不通的。

func setuprocket() { 

    let rocket0 = SKTexture(imageNamed: "0zero.png") 
    let rocket1 = SKTexture(imageNamed: "1one.png") 
    let rocket2 = SKTexture(imageNamed: "2two.png") 
    let rocket3 = SKTexture(imageNamed: "3three.png") 
    let rocket4 = SKTexture(imageNamed: "4four.png") 
    let rocket5 = SKTexture(imageNamed: "5five") 



    let animateRocket = SKAction.sequence([ 
     SKAction.waitForDuration(0.0, withRange: 1.0), 
     SKAction.animateWithTextures([rocket0, 
      rocket1, 
      rocket2, 
      rocket3, 
      rocket4, 
      rocket5], 
      timePerFrame: 0.1)]) 


    let rocketAnim = SKAction.repeatActionForever(animateRocket) 



    let rocket = SKSpriteNode(texture: rocket1) 

    rocket.runAction(rocketAnim) 
    rocket.setScale(0.5) 
    rocket.position = CGPoint(x: self.frame.size.width * 0.35, y: self.frame.size.height * 0.5) 

    rocket.physicsBody = SKPhysicsBody(circleOfRadius: rocket.size.height) 
    rocket.physicsBody?.dynamic = true 
    rocket.physicsBody?.allowsRotation = false 
    //bitmask 
    rocket.physicsBody?.contactTestBitMask = asteroidCategory 
    rocket.physicsBody?.collisionBitMask = asteroidCategory 
    self.addChild(rocket) 

} 

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { 
    /* Called when a touch begins */ 

    for touch: AnyObject in touches { 

     let location = touch.locationInNode(self) 


     rocket.physicsBody!.applyImpulse(CGVectorMake(0, 30)) 
     rocket.physicsBody!.velocity = CGVectorMake(0, 300) 
     println(location) 

     //if start.containsPoint(location) { 
     // self.physicsWorld.gravity = CGVectorMake(0.0, -3.0) 
     // start.removeFromParent() 
     // } 

     } 

    } 
    } 

一切正確定義,只是「!」崩潰的遊戲。

+1

這很簡單。這僅僅意味着你的'physicsBody'是零。你能告訴你如何設置這個屬性嗎? –

+0

我將設置添加到底部的問題 – Jacob

+0

好吧,你用什麼方法設置你的物理體?它是否在觸摸開始之後才被調用? –

回答

0

我拿出let rocket = SKSpriteNode(texture: rocket1) ,並把它放在最上面的class下面。我確信這是在我的項目的最頂部而不是在一個函數中調用的。