SpriteKit 解包可选错误 (Swift)



每当我运行我的项目时,我都会收到一个错误的指令错误......

ground.physicsBody!.dynamic = false

这是我运行此代码片段的完整代码。我不确定发生了什么,我对可选选项没有太多经验。

法典:

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)

您在创建物理主体后重新初始化ground,因此新对象没有物理主体,因此显示 nil 错误。

将代码更改为

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)

根据评论,当您在解开可选包时遇到找到 nil 的错误时,一般做法是使用 ?if let来安全地解开包装。在这种情况下,它可以像

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

相关内容

最新更新