Swift SpriteKit PhysicsBody被Xcode强制为可选

时间:2014-09-03 07:45:13

标签: ios swift sprite-kit skphysicsbody flappy-bird-clone

我有以下问题尝试使用Swift和SpriteKit在Xcode 6 beta 7中编写一个flappy bird克隆。

将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构建将失败并且在两行上出现错误,我在其中添加了dynamic和allowRotation值到PhysicsBody,我能做到的唯一方法是执行以下操作:

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

将physicsBody作为选项使用'?'这个角色是因为当我试图操纵我想要添加的一些鸟类物理时,它会使某些操作变得复杂,比如移动时的旋转。

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

谢谢!

Screenshot of issue http://new.tinygrab.com/1afb7d57d73040945157fec7b418aa2caed4a72acd.png Zoom Screenshot of issue http://new.tinygrab.com/1afb7d57d7c7502078cab3568b6dc36285cc8dea51.png

2 个答案:

答案 0 :(得分:2)

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

bird.physicsBody!.dynamic = true

原因: 在SKNode代码中,您将看到以下声明:

var physicsBody: SKPhysicsBody?

physicsBody是一个Nullable Type.So XCode会检查以防止你打开nil值。

答案 1 :(得分:1)

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

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

bird.physicsBody = body