Chapter 06

衝突判定(1対多)

かじる
かじる
2023.09.12に更新

衝突判定(1対多)

多数のスプライトをまとめて管理する"Group"を使う事で、
効率よく衝突判定を行う事ができます。

グループを作る処理は次のとおりです。

let enemyGroup = new Group();

グループを用意した後は、次の様にしてスプライトを作ります。

let enemy = new enemyGroup.Sprite(x, y);

グループを使って、10個のスプライトを作る処理は次の様になります。

let cvs;// キャンバス
let player;// プレイヤー
let enemyGroup;// 敵グループ

function setup(){

	// キャンバスの準備
	cvs = new Canvas(480, 320);

	// プレイヤー
	player = new Sprite(width/2, height/2);
	player.width = 30;
	player.height = 30;
	player.color = "orange";
	player.image = "reimu_good_01.png";// 画像を設定する
	
	// 敵グループ
	enemyGroup = new Group();
	
	// 敵を10個配置
	for(let i=0; i<10; i++){
		// 敵
		let x = random(width);
		let y = random(height);
		let enemy = new enemyGroup.Sprite(x, y);
		enemy.width = 30;
		enemy.height = 30;
		enemy.color = "aqua";
		enemy.image = "marisa_good_01.png";// 画像を設定する
	}
}

// 省略

実行すると、次の様になります。

やりました!!

衝突タイミングと削除(1対多)

前回と同じ判定方法で、スプライトとグループとの衝突判定をする事ができます。

衝突判定 意味
collides スプライトが衝突した最初のタイミング
colliding スプライトが衝突している間ずっと
collided スプライトが衝突した後のタイミング

具体的には次の様になります。

// 省略

function draw(){
	background("silver");// 背景色
	// キーボード
	// 中略
	// 衝突判定
	player.collides(enemyGroup, (a, b)=>{
		b.remove();// 敵を消す
	});
}

実行すると、次の様になります。

やりました!!

次回は、実際に"避けるゲーム"を作っていきます。
お楽しみに!!