Skip to content
第21回 敵の配置とジャンプ操作の改善

3 / 4 可変ジャンプの実装と速度減衰

このステップの目的

ジャンプ上昇中にボタンを離した瞬間に上向き速度を減衰させる「可変ジャンプ(カットオフ)」を実装し、ボタンを押す長さに応じて小ジャンプと大ジャンプを使い分けられるようにします。

固定ジャンプの課題と可変ジャンプの必要性

ボタンを押した瞬間に一定の初速を与えるだけのジャンプでは、短く押しても長押ししても常に同じ最高到達点まで跳躍します。これにより、以下の状況で操作が制限されます。

  • すぐ近くの低い段差へ軽く飛び移りたい
  • 頭上にブロックや敵が配置された狭い通路をくぐり抜けたい
  • 空中の敵を低空ジャンプで素早く踏みたい

プレイヤーがボタンを押している時間を跳躍の高さに反映させることで、状況に応じたジャンプ操作が可能になります。

上昇中のキー解放判定

可変ジャンプは、「ジャンプボタンが離された瞬間(IsReleased)」かつ「現在上昇中であること(velocity_.y < 0.0f)」の2条件が揃ったフレームに発動します。

Player.cppcpp
// 上昇中にボタンを離したときだけ上向き速度を減衰させる
if (input.IsReleased(Key::Jump) && velocity_.y < 0.0f)
{
    velocity_.y *= tuning::player::JumpCutMultiplier;
}

上昇中(velocity_.y < 0.0f)を条件に含める理由

キーが離されたこと(input.IsReleased)だけを判定すると、頂点を過ぎて落下している最中や、足場から歩いて落下した後にボタンを離した際にも減衰処理が適用されてしまいます。
垂直速度が負(上向き)である期間に限定することで、ジャンプの上昇中のみ意図した減衰を適用できます。

カットオフ倍率の調整

減衰処理では、現在の上向き速度に減衰倍率 JumpCutMultiplier(例: 0.5f)を乗算します。

text
【長押しした場合】
v.y = -600 ---> (重力で徐々に減速) ---> 頂点到達(最大高度)

【途中でボタンを離した場合】
v.y = -400 ---> [ボタン解放] ---> v.y = -200 に減衰 ---> 早期に頂点到達(低空ジャンプ)
  • 倍率 0.0f: ボタンを離した瞬間に上向き速度が即座に0となり、不自然に停止します。
  • 倍率 1.0f: 速度が変化せず、ジャンプの高さが一定のままになります。
  • 倍率 0.4f0.6f: 慣性を残しつつ、ボタンを離したタイミングに応じた高さの変化が得られます。

ジャンプ開始の判定(IsPressed による初速付与)と、ジャンプ切り上げの判定(IsReleased による速度減衰)を明確に分離することで、一貫した跳躍制御を実現します。

チェックリスト
  • 固定ジャンプと比較した可変ジャンプの利点を説明できる
  • 落下中に誤って減速処理が走らないよう、上向き速度(velocity_.y < 0.0f)を判定条件に含めている
  • 減衰倍率(JumpCutMultiplier)を適用して、短押し時の低空ジャンプと長押し時の大ジャンプを作り分けられる

ゲームプログラミング実践