我有以下问题尝试使用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
答案 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