for (var g = 0; g < cArray.length - 1; g++) { if (h !== g) { if ( cArray[h].x + cArray[h].size > cArray[g].x - cArray[g].size && cArray[h].x - cArray[h].size < cArray[g].x + cArray[g].size && cArray[h].y + cArray[h].size > cArray[g].y - cArray[g].size && cArray[h].y - cArray[h].size < cArray[g].y + cArray[g].size ) { cArray[h].dirX = cArray[g].dirX; cArray[g].dirX = cArray[h].dirX; cArray[h].dirY = cArray[g].dirY; cArray[g].dirY = cArray[h].dirY; } } }En lugar de rebotar, no se enganchan entre sí, lo que hace que sus direcciones se combinen.