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

时间:2015-05-07 13:29:05

标签: swift sprite-kit

我正在开发一款iOS游戏,其中'玩家'会在波浪上移动。它应该能够在波浪上跳跃并着陆。 在当前版本中,它会跳跃但不会向下移动。

当平台不移动时它确实有效,但移动平台对应用程序至关重要。

谢谢,伙计们!

代码

平台'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()

}

1 个答案:

答案 0 :(得分:1)

你会想知道self.gravity设置为什么以及touchesEnded之后出现什么velocityY,这很可能是你问题的根源

在旁注中,您没有使用内置物理的任何理由?

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

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

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

一旦发生这种情况,你可以在touchesBegan中运行类似的东西:

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

这会给你的玩家提升100(你可以调整它以适应你希望你的玩家跳得多高)。重力会为你排序休息。