【发布时间】:2017-09-17 00:05:04
【问题描述】:
我一直在尝试通过使用来改变重力
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)
【问题讨论】:
-
您能否更具体地说明如何发现重力没有变化?在您的 SKScene 中您希望移动/下降的任何其他元素?如果是,您是否设置了他们物理体的质量/affectedByGravity 属性?
-
您是否希望精灵在关闭重力后立即停止?
-
就像@0x141E 指出的那样,如果你想让你的飞船立即停止然后朝另一个方向前进,你需要改变它的速度/速度属性,否则仍然会施加力它。
-
记住,重力是一种力。它会导致加速。如果你关闭重力,你并没有关闭运动,你只是关闭了加速度。如果当你关闭重力时一个物体正在移动,它会继续移动,直到其他一些力作用在它上面。此外,代码中的
spaceship.physicsBody?.isDynamic = true行什么也没做。 -
这是有道理的。我用 spaceship.physicsBody?.velocity = CGVector(dx: 0, dy: 0) 来阻止它。
标签: ios swift sprite-kit physics skspritenode