6

我在尝试使用 Swift 和 SpriteKit 在 Xcode 6 beta 7 中编写一个飞扬的鸟克隆时遇到以下问题。

将physicsBody 属性添加到SKSpriteNode 后,我无法直接更改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

Xcode 构建将失败,在我向 PhysicsBody 添加动态和allowRotation 值的两行错误,我能做到这一点的唯一方法是执行以下操作:

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

将physicsBody 作为“?”选项的问题 特点是当试图操纵一些我想添加的鸟类物理特性时,做某些操作变得很复杂,比如移动时的旋转。

关于如何避免/修复必须将physicsBody 属性标记为可选的任何建议?(“物理体?”)

谢谢!

问题截图
(来源:tinygrab.com

放大问题截图
(来源:tinygrab.com

4

2 回答 2

2

实际上,这个问题有一个简单的方法来解决它。你可以加 !之后的physicsBody是这样的

bird.physicsBody!.dynamic = true

原因:在 SKNode 代码中,你会看到这样的语句:

var physicsBody: SKPhysicsBody?

physicsBody 是 Nullable 类型。因此 XCode 会检查以防止您打开 nil 值。

于 2014-09-19T07:33:48.837 回答
1

我解决了它为 SKPhysics 主体创建一个对象并在配置它之后将其分配给 Sprite:

let body = SKPhysicsBody(circleOfRadius: bird.size.height/2)
body.dynamic = true
body.allowsRotation = false

bird.physicsBody = body
于 2014-09-15T15:57:33.670 回答