✨
phaserでゲーム開発 第七回
phaserでゲーム開発シリーズ、第七回。
前回の記事はこちら。
この記事では、複数の敵を出す処理について解説します。
Phaserで複数の敵キャラを出現させる方法
今回の実装では、一定時間ごとに敵キャラを生成し、同時に出現できる数に上限を設定する仕組みを組み込みました。これにより、ゲーム進行に応じて敵が増えていく緊張感を演出できます。
敵キャラを管理するグループの用意
敵をまとめて管理するために、create() 内で Physics Group を生成します。
this.#enemys = this.physics.add.group();
このグループに新しい敵キャラを追加していくことで、後からまとめて動作や当たり判定を管理できます 。
タイマーイベントで定期的に生成
Phaser の time.addEvent を利用し、2秒ごとに敵キャラを生成するよう設定しました。
this.time.addEvent({
delay: 2000, // 2秒ごと
callback: this.spawnEnemy,
callbackScope: this, // this を GameScene に固定
loop: true, // 繰り返し実行
});
この仕組みのおかげで、ゲーム中に自動的に敵が増えていきます。
出現数の上限を決める
出現数が無限に増えると処理が重くなるため、最大5体までという制限を入れています。
const maxEnemies = 5;
if (this.#enemys.countActive(true) >= maxEnemies) {
return; // 5体以上なら生成しない
}
敵キャラの生成処理
実際に敵を生成する処理は spawnEnemy() にまとめています。
const x = Phaser.Math.Between(100, 700); // ランダムなX座標
const y = 50; // 上から落ちてくる
const enemy = this.#enemys.create(x, y, "enemy");
// 当たり判定を調整
enemy.body.setSize(30, 30).setOffset(1, 1);
// 物理的な特性を設定
enemy.setCollideWorldBounds(true);
enemy.setBounce(0.2);
enemy.setVelocity(Phaser.Math.Between(-100, 100), 20);
// プレイヤーや地形との衝突を有効化
this.physics.add.collider(enemy, this.#layer);
this.physics.add.collider(enemy, this.#player);
ここで行っているのは以下の3点です。
- 位置のランダム化:出現位置を毎回変えることでゲーム性を向上。
- 物理挙動の設定:跳ね返りや速度を調整して自然な動きを演出。
- 衝突判定の追加:プレイヤーや地形としっかり干渉するようにする。
敵の行動パターン
update() 内では、一定の確率で敵の移動方向を変える処理を入れています。
this.#enemys.children.iterate((enemy) => {
if (!enemy) return;
if (Phaser.Math.Between(0, 100) < 2) {
const speed = 100;
const dir = Phaser.Math.Between(0, 1);
switch (dir) {
case 0:
enemy.setVelocity(speed, 0);
enemy.anims.play("enemy-walk-right", true);
break;
case 1:
enemy.setVelocity(-speed, 0);
enemy.anims.play("enemy-walk-left", true);
break;
}
}
});
- ランダム要素を入れることで、同じ動きの繰り返しにならず変化が生まれます。
- 今回は「2% の確率で方向転換」としています。
まとめ
今回の実装で学べるポイントは次の通りです。
- グループ管理で複数の敵キャラを扱いやすくする
- タイマーイベントで敵を定期的に追加する
- 最大数を制限して処理の安定性を確保
- ランダム挙動で単調さを回避
これらを組み合わせることで、シンプルながらもゲームらしい「複数の敵が迫ってくる」体験を作ることができます。
株式会社ONE WEDGE
【Serverlessで世の中をもっと楽しく】 ONE WEDGEはServerlessシステム開発を中核技術としてWeb系システム開発、AWS/GCPを利用した業務システム・サービス開発、PWAを用いたモバイル開発、Alexaスキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。
Discussion