如何使物体跳跃并降落在移动平台上

How to make an object jump and land on a moving platform

我正在制作跳投 iOS 游戏,其中 'player' 会在波浪中移动。它应该能够跳跃并降落在波浪上。 在当前版本中,它会跳跃但不会向下移动。

它在平台不移动的情况下确实有效,但移动平台对应用程序至关重要。

谢谢大家!

代码

平台'characterBaseline'正在根据此功能移动

wave.bar.position.y = CGFloat(Double(wave.bar.position.y) + createSinWave(angle))

func createSinWave(angle:Double) -> Double {

    var sinWave = sin(angle)

    return sinWave

}

玩家的跳跃和移动基于以下函数

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {

    if self.onGround {
        self.velocityY = -14.0
        self.onGround = false
    }
}

override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {

    if self.velocityY < -7.0 {
        self.velocityY = -7.0
    }

}

override func update(currentTime: NSTimeInterval) {

    // Character op wave
    self.character.position.y = CGFloat(Double(self.character.position.y) + createSinWave(angle))
    self.characterBaseline = self.character.position.y

    // Jump
    self.velocityY += self.gravity
    self.character.position.y -= velocityY

    if self.character.position.y < self.characterBaseline {
        self.character.position.y = self.characterBaseline
        velocityY = 0.0
        self.onGround = true
    }

    // Golf
    updateWaveBarPosition()

}

您需要了解 self.gravity 的设置以及在 touchesEnded 之后出现的 velocityY 是什么,这很可能是您问题的根源

附带说明一下,您不使用内置物理的原因是什么?

使用 SpriteKit 的原生物理引擎创建跳跃动作非常容易。

你只需要为每个精灵(玩家和平台)添加一个物理体

self.player.physicsBody = SKPhysicsBody(bodyWithRectangleOfSize:self.player.size)

一旦发生这种情况,您就可以 运行 在 touchesBegan 中执行类似的操作:

self.player.physicsBody.applyImpulse(0, 100)

这会给您的玩家带来 100 的提升(您可以调整它以适合您希望玩家跳多高)。 Gravity 会为您解决剩下的问题。