ios - 如何通过 ease in 和 ease out 创造更自然的跳跃?

标签 ios swift sprite-kit

我正在设计一款“玩家”必须跳跃的游戏。我有一个有效的跳跃功能,但跳跃非常“线性”。我希望跳跃具有“缓入”和“缓出”功能。

这意味着跳跃的第一部分应该上升得更快,而在“顶部”附近速度会降低,而在向下移动时速度应该会增加。

我已经尝试了一些事情:

var jumpStartTime: CGFloat = 0.0
var jumpCurrentTime: CGFloat = 0.0

var currentDuration = CGFloat(currentTime) - jumpStartTime

但是,我不知道从哪里开始以及如何开始。

这是线性跳跃的函数。

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

    if onGround && !gameOver {
        if self.initialJumpY == nil {
            self.initialJumpY = self.character.position.y
        }

        if self.character.position.y - self.initialJumpY! < 100 {
            self.character.physicsBody?.applyImpulse(CGVectorMake(0, 75))
        } else {
            self.character.physicsBody?.velocity.dy = 0.0
        }
    }

     self.onGround = false

}

override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
    self.character.physicsBody?.velocity.dy = 0.0
    self.initialJumpY = nil
}

如何进行更“自然”的线性跳跃?

谢谢大家!

尼克。

最佳答案

首先,“线性”跳跃永远不会自然。 您需要对速度应用负加速度。速度的变化将是线性的。 速度公式如下所示: v = v0 - 因子 * t。

t 是时间 v0 将是初始速度,因素是您尝试获得良好效果的因素。 以米每秒为单位的速度和以秒为单位的时间,地球重力系数为 9.81。

关于ios - 如何通过 ease in 和 ease out 创造更自然的跳跃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30267355/

相关文章:

ios - 尝试在点击 Google map 标记时运行函数

ios - Xcode 10.1 归档时不显示 'distribute app' 选项,无法归档

iOS map 套件 : tap in callout touches annotationView that is rendered under the callout

objective-c - 我怎样才能使分数等于在 spritekit 中玩游戏的时间(以秒为单位)

ios - Swift中SKShapeNode的浮点问题

iphone - 同时编辑和删除 UITableView 中的多行

objective-c - 无法指定存储类(Objective-c)错误

ios - 尝试取消与已删除实体的关系时核心数据崩溃

ios - 如何检测点击 UITableView 的清晰部分?

ios - 允许 SpriteKit 中的触摸传播