Appearance
第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方向にも使っている。