我对 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)
}
}
}
我不知道为什么这不起作用。任何想法都会很棒!谢谢!
最佳答案
在您的代码中,您使用了局部变量newBody
,您确定该节点在update
中可用吗?
affectedByGravity
旨在定义与物理世界重力的相互作用,与任何其他领域无关。
如果要定义给定节点相对于字段的行为,则需要相应地设置节点的 fieldBitMask
和字段的 categoryBitMask
。
关于swift - XcodeaffectedByGravity 值重置为 true 并且不会保持设置为 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49074981/