Appearance
第05回 プレイヤーを狙う敵弾
3 / 4 敵の発射処理を接続する
このステップの目的
敵の発射タイマーと敵弾Managerを接続し、発射時点のプレイヤーを狙わせる
敵の発射処理をまとめる
敵の発射間隔はEnemyが管理します。 TryShoot()は発射間隔を確認し、敵弾を生成できたときだけ次の待ち時間を始めます。 この考え方は第02回のプレイヤーの発射処理と同じです。
Enemyへ発射間隔のタイマーを持たせ、毎フレーム減らします。 敵が再利用されるときは、Spawn()で最初の発射までの待ち時間へ戻します。
Enemy.hとEnemy.cppcpp
// Enemy.h
bool TryShoot(EnemyShotManager& shots, const Vector2& targetPosition);
private:
float shotTimer = 0.0f;
// Enemy.cpp
bool Enemy::TryShoot(
EnemyShotManager& shots,
const Vector2& targetPosition)
{
if (!isActive || shotTimer > 0.0f)
return false;
if (!shots.Spawn(GetMuzzlePosition(), targetPosition))
return false;
shotTimer = tuning::enemy::ShotInterval;
return true;
}Enemy::Update()では、次のようにタイマーを減らします。
Enemy.cppのUpdateへ追加cpp
shotTimer = std::max(0.0f, shotTimer - deltaTime);Enemy.cppcpp
enemy.TryShoot(enemyShots, playerPosition);目標位置を一度だけ渡す
この処理で使うplayerPositionは、敵弾を発射するフレームのプレイヤー中心です。 EnemyShot::Spawn()へ渡した後、敵弾は自分のvelocityだけを使って進みます。
プレイヤーが発射後に移動しても、すでに発射された敵弾の方向は変わりません。
チェックリスト
- 敵の発射間隔を
Enemyが管理している - 発射処理を
Enemy::TryShoot()へまとめている - 敵弾を生成できたときだけ発射間隔を開始している
- 発射時点のプレイヤー位置を目標として渡している