gpt4 book ai didi

ios - 在展开可选值时意外发现 nil - Sprite Kit

转载 作者:行者123 更新时间:2023-11-28 05:27:57 24 4
gpt4 key购买 nike

大家好,我的 Sprite Kit 游戏有一个大问题。我是新手,我正在尝试做一种小行星游戏,只是为了锻炼我学到的东西。

我的问题是,我的小行星是无限的,除非玩家被击中,否则它们不会停止。我的代码如下:

对于 meteor :

  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)

}

我用一个 Action 调用函数:

   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 didBeginContact(contact: SKPhysicsContact) {

var nodeB = contact.bodyB!.node!

if nodeB.name == "Asteroid" {

println("Touched")
nodeB.removeFromParent()
}

}

所以我的问题从 nodeB 开始,出于某种原因,有时当小行星撞击玩家时,这段代码工作正常,但有时当小行星撞击玩家时,游戏崩溃,我得到

fatal error: unexpectedly found nil while unwrapping an Optional value

程序进入联系人功能后。

关于如何解决这个问题的任何想法或解决方案?多谢! =)

最佳答案

崩溃来自两个强制展开调用之一:bodyB!node!。通过这样写,您断言您确信它们永远不会是nil

找到其中一个为 nil 的情况的方法是将代码分解成可以使用断点检查的行。

var bodyB = contact.bodyB
if bodyB == nil {
// breakpoint here
}
var nodeB = bodyB!.node
if nodeB == nil {
// breakpoint here
}
if nodeB!.name = "Asteroid" // etc.

一旦代码停止,您可以检查对象并尝试找出它们为 nil 的原因并解决问题。

关于ios - 在展开可选值时意外发现 nil - Sprite Kit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30226903/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com