嘿傢伙即時通訊我的雪碧套件遊戲有一個巨大的問題。我是新來的,我試圖做一種小行星遊戲,只是爲了鍛鍊我學到的東西。意外地發現零,而解包一個可選值 - Sprite Kit
我的問題是,我的小行星是無限的,他們不停止,除非玩家被擊中。我的代碼是如下:
對於流星:
func addMeteor() {
let bigMeteor = SKSpriteNode(imageNamed: "meteor1")
let bigMeteorAux = bigMeteor
let sizeX = UInt32(CGRectGetMaxX(self.frame))
let randomX = CGFloat(arc4random_uniform(sizeX))
var impulse : CGVector!
bigMeteorAux.position = CGPoint(x: randomX, y: size.height + 100)
impulse = CGVector(dx: 0, dy: -30)
bigMeteorAux.physicsBody = SKPhysicsBody(texture: bigMeteor.texture, size: bigMeteor.size);
bigMeteor.physicsBody?.affectedByGravity = false
bigMeteor.physicsBody?.allowsRotation = false
bigMeteorAux.physicsBody?.friction = 0.0
bigMeteorAux.physicsBody!.categoryBitMask = CollisionCategoryAsteroids
bigMeteorAux.name = "Asteroid"
foregroundNode!.addChild(bigMeteorAux)
bigMeteorAux.physicsBody!.applyImpulse(impulse)
}
林調用函數與動作:
runAction(SKAction.repeatActionForever(
SKAction.sequence([
SKAction.runBlock(addMeteor),
SKAction.waitForDuration(1.0)
])
))
完美到現在爲止,遊戲作品就好了。這是播放器代碼:
playerNode = SKSpriteNode(imageNamed: "spaceshipv2")
playerNode!.physicsBody = SKPhysicsBody(texture: playerNode!.texture, size: playerNode!.size);
playerNode!.xScale = 0.5
playerNode!.yScale = 0.5
playerNode!.position = CGPoint(x: size.width/2.0, y: 220.0)
playerNode!.physicsBody!.linearDamping = 1.0
playerNode!.physicsBody!.allowsRotation = false
playerNode!.physicsBody?.affectedByGravity = false
playerNode!.physicsBody!.categoryBitMask = CollisionCategoryPlayer
playerNode!.physicsBody!.contactTestBitMask =
CollisionCategoryAsteroids
playerNode!.name = "Player"
//addChild(playerNode!)
foregroundNode!.addChild(playerNode!)
而最後的接觸FUNC:
func didBeginContact(contact: SKPhysicsContact) {
var nodeB = contact.bodyB!.node!
if nodeB.name == "Asteroid" {
println("Touched")
nodeB.removeFromParent()
}
}
所以我的問題,節點B啓動,因爲某些原因,有時當小行星撞擊玩家此代碼的工作只是罰款,但其他時候,當小行星擊中玩家遊戲崩潰,我得到
fatal error: unexpectedly found nil while unwrapping an Optional value
程序進入聯繫功能後。
有關如何解決此問題的任何想法或解決方案?多謝! =)
Thx很多mundi。 :)我不得不對你的代碼做一些改動,但無論如何,就像我對Cadin說的那樣,我想知道爲什麼相同的代碼給我80%的時間是一個有效的節點名稱,但其他20%給了我一個零。不要對我有任何意義。但是,無論如何! :)也許我應該在將節點添加到場景之前檢查是否有有效的名稱。 :) – Gusfat