-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()
// }
}
}
}
一切正確定義,只是「!」崩潰的遊戲。
這很簡單。這僅僅意味着你的'physicsBody'是零。你能告訴你如何設置這個屬性嗎? –
我將設置添加到底部的問題 – Jacob
好吧,你用什麼方法設置你的物理體?它是否在觸摸開始之後才被調用? –