Skip to content
第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()へまとめている
  • 敵弾を生成できたときだけ発射間隔を開始している
  • 発射時点のプレイヤー位置を目標として渡している