tengo un objeto con coordenadas X; Y de un círculo verde, radio const = 5. nombre "Comida". 50 objetos con colocación aleatoria alrededor del lienzo.
Tengo un objeto con coordenadas X; Y de un círculo rojo, radio const = 8. nombre "jugador".
Tengo una matriz X;Y de coordenadas que va x,y 50 veces (100 cuerdas), nombre "allFood". con todos los objetos de "comida"
Necesito verificar si hay colisión entre la comida y el jugador en el lienzo y agregar el marcador. Hice una pieza de código viable:
for (let i = 0; i < 100; i=i+2){ if ((player.x == allFood[i]) && player.y ==(allFood[i+1])){ scoreboard=scoreboard+1 score.innerHTML = scoreboard } }Pero solo verifica si el centro del círculo del jugador y el centro del círculo de la comida son precisos en el mismo píxel, lo cual es muy molesto. ¿Alguien podría ayudar a mejorar el código para que funcione cuando ambos radios chocan? No sé de ninguna manera, excepto 160 ifs verificando cada píxel.
Si el centro del círculo del jugador está a menos de (radio 5 + radio 8) = 13 unidades del centro de un círculo de comida, están chocando. Usa Pitágoras para calcular la distancia.
for (let i = 0; i < 100; i=i+2){ let distance = Math.sqrt(Math.pow(player.x - allFood[i], 2) + Math.pow(player.y - allFood[i + 1], 2)) if (distance <= 13) { scoreboard=scoreboard+1 score.innerHTML = scoreboard } }