大学の課題でゲームを作っています。アイデアは、それらをブロックする線を描くこと (クリック、ドラッグ & リリースして線を描く) によって、入ってくる小惑星 (線) から中心円を守ることです。小惑星が線に衝突すると、小惑星と線の両方が破壊されます。
私が現在抱えている問題は、衝突が検出されないことです。
線と小惑星の両方のオブジェクトの配列があります。線は単に開始と終了の x と y で構成され、小惑星はランダムな速度とランダムな角度 (入射角) で構成されます。コンテキストが回転し、小惑星が描画され、次の行のためにリセットされます。
衝突を検出するには、getImageData を使用して小惑星の前でチェックしますが、その反復で線が進むピクセル数 (基本的には速度) と色が赤の場合は小惑星を破壊しますまだラインを破壊することは、私がそれに来たときにそのハードルに取り組むでしょう(提案は大歓迎です).
function asteroids_draw() {
for (var i = 0; i < asteroids.length; i++) {
// Drawing setup
context.save();
context.translate(width / 2, height / 2);
context.rotate(asteroids[i].angle);
// Detecting close asteroids
if ((asteroids[i].distance - asteroids[i].speed) < planet.size) {
asteroids.splice(i, 1);
game_life_lost();
context.restore();
return;
} else if ((asteroids[i].distance - asteroids[i].speed) < 150){
asteroids[i].colour = '#FF0000';
}
// Scanning ahead for lines
for (var j = 0; j < asteroids[i].speed; j++) {
if (context.getImageData(asteroids[i].distance - j, 0, 1, 1).data[0] == 255) {
asteroids.splice(i, 1);
context.restore();
return;
}
}
// Drawing asteroid
context.beginPath();
context.moveTo(asteroids[i].distance -= asteroids[i].speed, 0);
context.lineTo(trig, 0);
context.strokeStyle = asteroids[i].colour;
context.stroke();
context.closePath();
context.restore();
}
}
問題は、小惑星が線と衝突することはなく、その理由や別の簡単な方法が一生わからないことです。事前に感謝します。