Skip to content
第18回 重力、ジャンプ、着地

1 / 4 重力で落下させる

このステップの目的

Y方向の速度と端数を使い、落下する移動を作ります。

速度に重力を加える

画面の下はYの正方向です。Player::UpdatePhysicsで速度に重力を加えます。上昇中はRiseGravity、落下中はFallGravityを使うと、上りと下りの感触を別々に調整できます。

Player.cpp(UpdatePhysicsの重力部分)cpp
const float gravity = velocity_.y < 0.0f
    ? tuning::player::RiseGravity
    : tuning::player::FallGravity;
velocity_.y += gravity * deltaTime;
velocity_.y = std::min(velocity_.y, tuning::player::MaxFallSpeed);

GameTuning.hのplayerにRiseGravity、FallGravity、MaxFallSpeedを追加します。std::minは二つの値の小さい方を返し、落下速度の上限を保ちます。

Y方向にも端数を残す

Player.hへremainderY_を追加し、Resetで0へ戻します。第17回のX方向と同じように、移動量の整数部分だけを取り出し、小数部分を次回へ残します。

Player.cpp(MoveVerticalの先頭)cpp
remainderY_ += velocity_.y * deltaTime;
const int pixelMove = static_cast<int>(remainderY_);
remainderY_ -= static_cast<float>(pixelMove);

この後に床との位置補正を接続します。速度を制限するのは、大きな移動によるすり抜けを起こしにくくするためです。あらゆる速度で衝突を保証する処理ではありません。次のステップと合わせて落下・着地を確認します。

チェックリスト
  • 重力を加えるとY方向の速度が増えることを説明できる。
  • X方向とY方向の端数を別の変数で保つ。
  • 第17回の整数移動をY方向にも使っている。

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