我寫了一個簡單的畫布,幾個浮動的氣泡。當它們中的任何一個都不碰撞時,它們應該是綠色的。出於某種原因,他們都是綠色的,但一個。當氣泡碰撞時,只有那些接觸到原始氣泡的紅色氣泡纔會開始變綠。我知道我錯過了一些對你們顯而易見的東西,但我經歷了一千次,卻看不到它。如果任何人都可以請讓我知道,我準備好感到愚蠢......謝謝。碰撞檢測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所說,我正在兩次畫泡。然而,它仍然與繪製圓圈的正確顏色不一致。我意識到聲明:t1.style =「#00FF00」必須放在for(var i ..)循環之前才能在繪製到畫布之前完全重置顏色。另外@ Blindmand67,你的編輯效率更高,運行更流暢,再次感謝! – DGwang