gpt4 book ai didi

ios - SpriteKit 展开可选错误(Swift)

转载 作者:搜寻专家 更新时间:2023-11-01 06:05:54 25 4
gpt4 key购买 nike

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

ground.physicsBody!.dynamic = false

这是我为配合此代码段而运行的完整代码。我不确定发生了什么,而且我对 optional 没有太多经验。

代码:

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
}

关于ios - SpriteKit 展开可选错误(Swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37618850/

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