所以我想创造一种力量来移动场景中的物理对象,而不需要不断地加速它们。就像几何破折号一样。因此,当我使用重力时,它就像坠落一样,但我不希望它像那样加速。
希望你明白,这有点难以解释。谢谢
所以我想创造一种力量来移动场景中的物理对象,而不需要不断地加速它们。就像几何破折号一样。因此,当我使用重力时,它就像坠落一样,但我不希望它像那样加速。
希望你明白,这有点难以解释。谢谢
force
在 SKPhysicsBody 术语中,这是 a (持续应用)和 an impulse
(即时应用)之间的区别:
您可以选择施加力或冲动:
根据施加力和处理模拟的下一帧之间经过的模拟时间量,施加力的时间长度。因此,要对物体施加连续的力,您需要在每次处理新帧时进行适当的方法调用。力通常用于连续效果
脉冲对身体的速度产生瞬时变化,与经过的模拟时间量无关。脉冲通常用于立即改变身体的速度。
(来自SKPhysicsBody 的 Apple 文档中的“让物理体移动” 。)
因此,要对您的身体施加一个脉冲,从而避免持续加速,请使用方法applyImpulse。
在您的游戏场景中,添加一个jump()
名为 from 的新方法touchesBegan
。使用touchesBegan
和touchesEnded
设置当您触摸屏幕时跟踪的布尔值。您可以使用didBegin
场景的方法来跟踪玩家何时降落在地面上(或与障碍物碰撞等)。
像这样的东西:
class GameScene: SKScene, SKPhysicsContactDelegate {
var person = SKSpriteNode()
var isJumping = Bool()
var isTouching = Bool()
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
isTouching = true
jump()
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
isTouching = false
}
func jump(){
if isTouching == true {
if isJumping == false {
person.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 600))
isJumping = true
}
}
}
func didBegin(_ contact: SKPhysicsContact) {
let bodyA = contact.bodyA.node
let bodyB = contact.bodyB.node
// Collided with ground
if bodyA?.physicsBody?.categoryBitMask == 2 && bodyB?.physicsBody?.categoryBitMask == 1 {
isJumping = false
jump()
}
}
}