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

274
Vistas
¿Cómo dejar que los cuadros de imágenes no se superpongan entre sí?

Así que hice un juego para un proyecto escolar en Windows Forms. El único problema es que mis imágenes se superponen entre sí. Entonces, mi pregunta, ¿cómo los coloco a todos en un lugar diferente donde no se tocan entre sí o no se superponen?

En este método, creo los zombis y aquí solo elijo ubicaciones aleatorias entre -100 y 0 en el x-as

 public void ZombieMaker(int aantal, Form formInstance, string ZombieDik) { for (int i = 0; i < aantal; i++) { PictureBox picture = new PictureBox(); picture.Image = Properties.Resources.ZombieDik; picture.Size = new Size(200, 200); picture.Location = new Point(random.Next(1500), random.Next(-100,0)); picture.SizeMode = PictureBoxSizeMode.Zoom; picture.Click += zombie_Click; picture.BackColor = Color.Transparent; formInstance.Controls.Add(picture); picture.Tag = zombies[i]; } }

foto de zombis superpuestos

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Realice un seguimiento de los cuadros de imagen ya colocados y valide si el límite se superpondría.

 //List of all pictureBoxes private List<PictureBox> _pictureBoxes = new List<PictureBox>(); public void ZombieMaker(int aantal, Form formInstance, string ZombieDik) { for (int i = 0; i < aantal; i++) { Rectangle newPosition; //loop till you found a new position while (true) { var newPoint = new Point(random.Next(1500), random.Next(-100,0)); var newSize = new Size(200, 200); newPosition = new Rectangle(newPoint, newSize); //validate the newPosition if (!_pictureBoxes.Any(x => x.Bounds.IntersectsWith(newPosition))) { //break the loop when there isn't an overlapping rectangle found break; } } PictureBox picture = new PictureBox(); _pictureBoxes.Add(picture); picture.Image = Properties.Resources.ZombieDik; picture.Size = newPosition.Size; picture.Location = newPosition.Location; ... } }

Para validar la superposición estoy usando el método IntersectWith de la clase Rectangle

https://docs.microsoft.com/en-us/dotnet/api/system.drawing.rectangle.intersectswith?view=net-6.0#system-drawing-rectangle-intersectswith(system-drawing-rectangle)

Editar:

Aquí un bucle do/while while en lugar del bucle while .

 Rectangle newPosition; do { var newPoint = new Point(random.Next(1500), random.Next(-100,0)); var newSize = new Size(200, 200); newPosition = new Rectangle(newPoint, newSize); } while(_pictureBoxes.Any(x => x.Bounds.IntersectsWith(newPosition))
over 4 years ago · Santiago Trujillo Denunciar

0

Arreglé su código para que los cuadros de imagen no se superpongan entre sí:

 public void ZombieMaker(int aantal, Form formInstance, string ZombieDik) { for (int i = 0; i < aantal; i++) { PictureBox picture = new PictureBox(); picture.Image = Properties.Resources.ZombieDik; picture.Size = new Size(200, 200); picture.Location = new Point(picture.Width * i, random.Next(-100,0)); picture.SizeMode = PictureBoxSizeMode.Zoom; picture.Click += zombie_Click; picture.BackColor = Color.Transparent; formInstance.Controls.Add(picture); picture.Tag = zombies[i]; } }
over 4 years ago · Santiago Trujillo 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