我一直在尝试通过使用来改变重力
override func touchesBegan(_ touches: Set<UITouch>, with event:
UIEvent?) {
self.physicsWorld.gravity = CGVector(dx: 0, dy: 0)
}
但这似乎并没有改变重力。当我在didMove函数中使用相同的代码时,它可以工作。
编辑1:
这是我的SKSpriteNode的代码:
spaceship = SKSpriteNode(imageNamed: "Spaceship")
spaceship.position = CGPoint(x: self.frame.width / 2, y: self.frame.height / 2)
spaceship.setScale(0.1)
spaceship.physicsBody?.isDynamic = true
spaceship.physicsBody = SKPhysicsBody(circleOfRadius: spaceship.size.width / 2);
addChild(spaceship)
最佳答案
它可以在didMove
中工作,因为对象将不会施加任何力,因此它们仍然
当您在游戏中途更改重力时,对象仍从先前的重力开始运动-更改重力只会影响施加到对象的/ future /力。
您既需要更改重力,也要更改要在触摸功能中受影响的节点的速度才能获得所需的效果。
另外,为简便起见,您可以直接访问dy
值,而不必为其分配新的CGVector
-这也有助于提高性能。spaceship.physicsBody!.velocity.dy = 0
关于ios - Spritekit改变重力,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46259524/