Appearance
第06回 プレイヤーの被弾
1 / 4 PlayerにHPと被弾処理を追加する
このステップの目的
プレイヤー自身がHPと無敵時間を管理し、被弾の成立結果を呼び出し側へ返す
HPをPlayerの状態にする
HPはゲーム全体の変数ではなく、プレイヤー自身の状態です。 Reset()で最大HPへ戻し、IsAlive()で生存状態を返します。
Player.hcpp
bool TryTakeDamage();
bool IsAlive() const;
int GetHp() const;
private:
int hp = 0;
float invincibleTimer = 0.0f;被弾が成立したときだけ変更する
無敵時間中に接触しても、HPと無敵時間を変更しません。 実際にHPを減らせたときだけtrueを返すため、後のSEやエフェクトも同じ成立条件へ接続できます。
今回の実装では、開始時のHPは3、1回の被弾で1減ります。 HPが2、1、0へ変化することを確認し、0になった時点ではまだゲームオーバー画面へ移らないことも確認します。
まず、Reset()で今回追加する状態を初期化します。既にあるプレイヤー位置の初期化は残し、その後へHPと無敵時間の初期化を追加します。
Player.cppcpp
void Player::Reset()
{
// 既存の位置初期化は残す
position = tuning::player::StartPosition;
hp = tuning::player::MaxHp;
invincibleTimer = 0.0f;
}Player.cppcpp
bool Player::TryTakeDamage()
{
if (invincibleTimer > 0.0f)
return false;
--hp;
invincibleTimer = tuning::player::InvincibleTime;
return true;
}チェックリスト
- HPが
Playerのメンバになっている -
Reset()でHPが最大値へ戻る - 無敵中は
TryTakeDamage()がfalseを返す - 被弾成立時だけHPが1減る