es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe una forma de agregar una etiqueta específica a un grupo de objetos, y hay algún evento de detección de colisiones?

Quiero crear dinámicamente JLabels “Bullets” mientras también genero JLabels “Shields” a través de un evento de arrastre del mouse. Las balas se generarán en lados aleatorios de un JFrame y se moverán hacia adelante/abajo/izquierda/derecha dependiendo del lado en el que se encuentren.

Quiero agregar una etiqueta específica, como “bullet” o “shield” y verificar la colisión si chocan, como lo haría en Unity. Sé que Java no está realmente diseñado para juegos, pero necesito saber si hay una manera oficial que pasé por alto, o si tengo que hacerlo de manera ineficiente (iterando a través de cada matriz y encontrando colisiones).

Idealmente, no tendría que agregarlos a una matriz en absoluto, y simplemente verificar si un objeto colisiona con la etiqueta específica que sería la misma para cada bala o escudo generado.

Quiero algo como esto:

JLabel l = new JLabel();
l.setBounds(x,y,20,20);

l.setBackground(Color.black);
l.setOpaque(true);
l.setTag("shield"); //lo que imagino que se vería
g.getContentPane().add(l); //Tengo un JFrame g
g.repaint();

//lo que imagino que se vería el evento de colisión y la comprobación de colisión

Timer t = new Timer();
TimerTask task = new TimerTask() {

public void run() {
    //verificación de colisión
}

};

t.scheduleAtFixedRate(task,0,1);
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    No hay una forma oficial de etiquetar JLabels en Java, pero puedes lograr esta funcionalidad creando una clase personalizada que extienda JLabel e incluya un campo de etiqueta. Luego puedes crear instancias de esta clase para tus objetos Shield y Bullet y establecer su campo de etiqueta según corresponda.

    Para verificar colisiones entre objetos con etiquetas específicas, puedes iterar a través de todos los JLabels en tu JFrame y verificar si sus etiquetas coinciden con las etiquetas de los objetos que te interesan. Esta es la forma menos eficiente, pero debería funcionar para números más pequeños de objetos.

    Si tienes un gran número de objetos y necesitas optimizar la detección de colisiones, puedes considerar el uso de una estructura de datos como un Quadtree o una Cuadrícula para particionar tu espacio y solo verificar colisiones entre objetos en celdas adyacentes. Esto puede reducir significativamente la cantidad de verificaciones de colisiones que necesitas realizar.

Comments are closed.