我一直在尝试通过使用来改变重力

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/

10-09 19:08