私はいくつかの気泡が浮遊しているシンプルなキャンバスを書きました。彼らは衝突していないときには緑色で、いずれかが赤色であると考えられます。何らかの理由で、彼らはすべて緑色ですが、1つです。そして、泡が衝突すると、赤色に変わる唯一のものは、元の泡に触れるもので、緑色から始まりません。私はあなたに本当に明白な何かを見逃していることを知っていますが、私はそれを何千回も上回り、それを見ることはできません。誰かが私に知らせてくれれば、私は愚かな気分になる準備ができている...ありがとう。ここで衝突検出Javascriptが機能していない(むしろ動作していない)
は、GitHubのの要旨へのリンクです:ここでは
https://gist.github.com/anonymous/e172bb18c078a2e9a797b8a30fdafcc3
は、キャンバスの描画に衝突検出からの抜粋です:
// Draw to Canvas
var draw = function() {
ctx.clearRect(0,0,600,400);
for(var i = 0 ; i < spawnArr.length; i++){
// Collision Detect & Correct
for(var j = 0; j < spawnArr.length; j++) {
var dx = spawnArr[i].x - spawnArr[j].x;
var dy = spawnArr[i].y - spawnArr[j].y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < spawnArr[i].rad + spawnArr[j].rad) {
ctx.strokeStyle = "#FF0000";
ctx.beginPath();
ctx.arc(spawnArr[i].x, spawnArr[i].y, spawnArr[i].rad, 0, 2*Math.PI);
ctx.closePath();
ctx.stroke();
ctx.beginPath();
ctx.arc(spawnArr[j].x, spawnArr[j].y, spawnArr[j].rad, 0, 2*Math.PI);
ctx.closePath();
ctx.stroke();
// console.log('hit');
}
else {
ctx.strokeStyle = "#00FF00";
ctx.beginPath();
ctx.arc(spawnArr[i].x, spawnArr[i].y, spawnArr[i].rad, 0, 2*Math.PI);
ctx.closePath();
ctx.stroke();
ctx.beginPath();
ctx.arc(spawnArr[j].x, spawnArr[j].y, spawnArr[j].rad, 0, 2*Math.PI);
ctx.closePath();
ctx.stroke();
//console.log('miss');
}
}
恐ろしいです。お返事ありがとうございます。 – DGwang
笑、私は今これを2日間働いて、ついにそれを手に入れました。 Blindman67が言ったように、私は気泡を2度描いていました。しかし、サークルに正しい色を描くこととはまだ矛盾していました。私は、ステートメント:t1.style = "#00FF00"をfor(var i ..)ループの前に置いて、キャンバスに描画する前に色を完全にリセットする必要があることに気付きました。また、@ Blindmand67、あなたの編集はより効率的で、よりスムーズに走った、ありがとう! – DGwang