Tengo dos matrices que contienen un objeto circular y un objeto de pared.
const allCircles = [circle1, circle2, circle3, circle4]; // const allFunnelWalls = [funnelBottomLeft, funnelBottomRight, funnelLeft, funnelRight];
Tengo esta función llamada collide y toma dos arreglos como parámetros, hasta ahora la tengo funcionando para un círculo y una pared porque accede a los elementos de ambos arreglos usando el mismo índice de "i" ¿Cómo lo creo para poder acceder a todos los elementos en la matriz allFunnelWalls al mismo tiempo y probarlo con cada círculo? Intenté usar el método every () de matrices, anidadas para bucles. He llegado al final de mi ingenio ... la ayuda sería muy apreciada
function collide(array, array2){ for(i = 0; i < array.length; i++){ // Collision detection algorithm between circles + inner walls let collision = lineCircle(array2[i].x, array2[i].y, array2[i].x2, array2[i].y2, array[i].x, array[i].y, array[i].radius); // Collision detection if(collision){ array[i].colour = "green"; array[i].xSpeed = 0; array[i].ySpeed = 0; return true; }else{ array[i].colour = "red"; return false; } } }
Podrías probar con un mapa anidado.
function collide(array, array2) { let results = array.map(circle => { return array2.map(wall => { // Collision detection algorithm between circles + inner walls let collision = lineCircle(wall.x, wall.y, wall.x2, wall.y2, circle.x, circle.y, circle.radius); // Collision detection if(collision) { circle.colour = "green"; circle.xSpeed = 0; circle.ySpeed = 0; return circle; }else{ circle.colour = "red"; return circle; } }) }) /* if you want to examine the results, you can do so here [ { colour: 'green', xSpeed: 0, ySpeed: 0 }, { colour: 'green', xSpeed: 0, ySpeed: 0 }, { colour: 'green', xSpeed: 0, ySpeed: 0 } ], [ { colour: 'red'} ], */ return results.any(result => result.colour === "green"); }