【发布时间】:2018-03-02 18:10:11
【问题描述】:
我对 Xcode Games 还很陌生,但我一直在尝试使用引力场。我能够创建字段,使身体与它们交互等,但是,当我以编程方式创建 SKSpriteNode 时,第二次我给它一个物理身体,无论我将 AffectedByGravity 或 fieldBitMask 值设置为什么,它总是被吸引到场景中的径向场。
这是我认为相关的代码:
func createNewBody(x: CGFloat, y: CGFloat){
let newBody = SKSpriteNode()
newBody.texture = SKTexture(image: #imageLiteral(resourceName: "Circle_Burgundy_Solid.svg"))
newBody.size = CGSize(width: 10, height: 10)
newBody.position.x = x
newBody.position.y = y
newBody.physicsBody = SKPhysicsBody(circleOfRadius: newBody.size.width/2)
newBody.physicsBody?.affectedByGravity = false
self.addChild(newBody)
}
这段代码是从touchBegan方法调用的:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches{
if touch == touches.first{
createNewBody(x: touch.location(in: self).x, y: touch.location(in: self).y)
}
}
}
我不知道为什么这不起作用。任何想法都会很棒!谢谢!
【问题讨论】:
-
我尝试在 update() 方法中打印 newBody.physicsBody?.affectedByGravity 的值,它返回 optional(true) 无论我在何时何地将其设置为 false,即使在 update()方法。
-
所以你的方法中的 newBody 是他们接触到的位置的新精灵,对吧?可能有一大堆,对吧?您在更新方法中打印出哪个 newBody ?是否有一个全局 newBody 存储在不同的地方?
标签: swift xcode sprite-kit field gravity