Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

189
Vistas
Generación aleatoria de rect generando todos los rect uno al lado del otro

Estoy trabajando en la generación aleatoria de rectángulos para un juego en lienzo, y agregué un código para evitar que los rectángulos generados aleatoriamente se superpongan, sin embargo, en lugar de evitar que mis rectángulos se superpongan, es como si tuviera que superponerse o de lo contrario no lo colocare. aquí está mi código (sé que está desordenado y no optimizado)

 function random_place(){ var x,y,height,width x = Math.floor(Math.random() * 10000); y = Math.floor(Math.random() * 100); width = Math.floor(Math.random() * (85 - 20 + 1) + 20); height = Math.floor(Math.random() * (85 - 20 + 1) + 20); return([x,y,width,height]) } function generate_obstacles(obstacles_count){ var counter = 0 var placement var placement_colide = false; console.log(obstacle_array.length) while(counter < obstacles_count){ placement_colide = false; x = Math.floor(Math.random() * 10000); y = Math.floor(Math.random() * 10000); width = Math.floor(Math.random() * 85); height = Math.floor(Math.random() * 60); placement = random_place(); for(let i=0; i<obstacle_array.length; i++){ if(obstacle_array[i][0]+100 > placement[0]+(placement[2]/2)+100 || obstacle_array[i][0]+(obstacle_array[i][2]/2)+40 < placement[0]) { if(obstacle_array[i][1]+35 > placement[1]+(placement[3]/2)+35 || obstacle_array[i][1]+(obstacle_array[i][3]/2)+35 < placement[1]){placement_colide = true; break} } placement_colide = true; break } if((placement[0] > (player_x*2)+5 || placement[0] < (player_x/2)+1.5) && placement_colide == true){ obstacle_array.push(placement); counter++; i = obstacle_array.length } }

También tengo el código completo en jsfiddle si eso fuera más fácil de leer https://jsfiddle.net/Fightingox/1dk0oaty/54/

alguien sabe el problema?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

El código desordenado es un código defectuoso

No pude averiguar qué hiciste mal porque el código es un desastre.

Los nombres son demasiado largos. Las propiedades se establecen como índices de matriz en lugar de propiedades con nombre. Y más..

En lugar de arreglar su código, lo he reescrito creando algunas funciones y renombrando muchos objetos.

Reescribir en partes

Para crear un rectángulo aleatorio

 const randI = range => Math.random() * range | 0; // only for positive ints function randomGameRect() { const x = randI(10000); const y = randI(100); const w = randI(61) + 20; const h = randI(61) + 20; return {x, y, w, h}; }

Para comprobar si dos rectángulos se superponen.

 function doRectsOverlay(rectA, rectB) { return !( // Overlaps if not any of... rectA.x > rectB.x + rectB.w || // left of rectA right of right of rectB rectB.x > rectA.x + rectA.w || // right of rectA left of left of rectB rectA.y > rectB.y + rectB.h || // top of rectA below bottom of rectB rectB.y > rectA.y + rectA.h); // bottom of rectA above top of rectB }

Para agregar un rectángulo rect a una matriz de rectángulos rects si no hay superposición.

Tenga en cuenta que también agregué la verificación del jugador que hace. No estoy seguro de por qué lo haces, así que simplemente lo puse.

 function addIfNotOverlap(rect, rects) { if (!rects.some(r => doRectsOverlay(r, rect)) { // check player stuff. I don't know why you do this. if (place.x > (player_x * 2) + 5 || place.x < (player_x / 2) + 1.5) { rects.push(rect); } } }

Y la última función reemplaza la tuya. Agrega count rectángulos a la matriz de rectángulos obstacleArray . Esta función requiere todas las funciones anteriores

 function generateObstacles(count) { while (count-- > 0) { addIfNotOverlap(randomGameRect(), obstacleArray); } }

Espero que esto te ayude a resolver tu problema.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda