このチャプターの目次
衝突判定(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();// 敵を消す
});
}
実行すると、次の様になります。
やりました!!
次回は、実際に"避けるゲーム"を作っていきます。
お楽しみに!!