var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var enemies = [new Enemy(100,100,10), new Enemy(200,100,10), new Enemy(300,100,10)];
canvas.addEventListener("click", function(e)
{
var cRect = canvas.getBoundingClientRect();
// Get the mouse coords
var canvasX = e.clientX - cRect.left;
var canvasY = e.clientY - cRect.top;
// clear the canvas
ctx.clearRect(0,0,canvas.width,canvas.height);
// Get the enemy the mouse clicked
var removal = selectEnemy(canvasX, canvasY);
// If we clicked a enemey, remove it from the array
if (removal > -1) enemies.splice(removal, 1);
// Draw the enemies from the array
drawAll();
});
function Enemy(x, y, r) {
this.x = x;
this.y = y;
this.r = r;
this.draw = function() {
ctx.beginPath();
ctx.arc(this.x, this.y, this.r, 0, 2 * Math.PI, false);
ctx.fillStyle = 'red';
ctx.fill();
}
}
function selectEnemy(X, Y){
for(var i = 0; i < enemies.length; i++) {
if(dist(X, Y, enemies[i].x, enemies[i].y) < enemies[i].r) return i;
}
return -1;
}
function drawAll() {
for(var i = 0; i < enemies.length; i++) enemies[i].draw();
}
function dist(x1, y1, x2, y2) {
return Math.sqrt(Math.pow(x1-x2,2)+Math.pow(y1-y2,2));
}
drawAll();
#canvas{
border: 1px solid black;
}
<canvas id="canvas" width=400 height=200></canvas>
あなたは、配列を「クリック」することはできません、配列はデータ構造です。敵を配列に格納してキャンバスに表示されていることを意味しますか?クリックイベントは、キャンバス要素自体にのみ反応します。マウスの座標を取得し、それらを配列内の各敵の各位置と比較する必要があります。 –
はい、私はキャンバスに表示される様々な敵を持っています。どのようにしてその全部のことをするのですか?笑こんにちは、coords @ SpencerWieczorekちょっと新しいです – Yorg
確かに、私は答えで説明します。私に少し例を挙げてみましょう。 –