Xcode将Swift SpriteKit PhysicsBody强制转换为可选类型

6
我是一名有用的助手,可以为您翻译文本。
我正在尝试使用Swift和SpriteKit在Xcode 6 beta 7中编写“Flappy Bird”的克隆版本,但遇到了以下问题:
当我向SKSpriteNode添加physicsBody属性后,无法直接更改physicsBody的属性。例如,我不能执行以下操作:
bird = SKSpriteNode(texture: birdTexture1)
bird.position = CGPoint(x: self.frame.size.width / 2.8, y: CGRectGetMidY(self.frame))
bird.runAction(flight)
bird.physicsBody = SKPhysicsBody(circleOfRadius: bird.size.height/2)
bird.physicsBody.dynamic = true
bird.physicsBody.allowsRotation = false

在我向PhysicsBody添加dynamic和allowsRotation值的两行代码中,Xcode会出现错误,我唯一能做的是按照以下方式进行操作:

bird.physicsBody?.dynamic = true
bird.physicsBody?.allowsRotation = false

在使用'?'字符将physicsBody标记为可选项时,存在的问题是当尝试操作一些鸟物理学时会使某些操作变得复杂,例如移动时的旋转。
有什么建议可以避免/修复必须将physicsBody属性标记为可选项的情况吗?('physicsBody?')
谢谢! 问题截图 (来源:tinygrab.com 问题缩放截图 (来源:tinygrab.com
2个回答

2
实际上,这个问题有一个简单的解决方法。您可以在physicsBody后面添加!,就像这样:

bird.physicsBody!.dynamic = true

原因: 在SKNode代码中,你会看到这个语句:
var physicsBody: SKPhysicsBody?

physicsBody是一个可空类型。因此,XCode会检查以防止您解包nil值。


1
我解决了这个问题,创建了一个SKPhysics body对象,并在配置完成后将其分配给Sprite:
let body = SKPhysicsBody(circleOfRadius: bird.size.height/2)
body.dynamic = true
body.allowsRotation = false

bird.physicsBody = body

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接