Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

192
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda