[DESARROLLO] Guía para la creación de objetos ambientales reutilizables en escenarios

Queremos crear una serie de elementos ambientales, para reutilizarlos ampliamente en los distintos escenarios. Así, los escenarios estarán mas ricamente decorados y podrán tener una mayor flexibilidad al cambio. Consideramos elemento ambiental cualquier objeto definido por unas dimensiones, con unas áreas de movimiento definidas y una representación gráfica. Unos ejemplos serían: una caja de suministros, una estatua, un vehículo ardiendo…

Ahora, aprenderemos como construir uno desde cero.

Para crear un objeto escénico, será necesario definirle:

  1. Sus dimensiones.
  2. El sitio donde se va a colocar en el escenario.
  3. Un área de colisiones (donde no puedan entrar otros objetos, personajes y proyectiles)
  4. Las imagenes que aparecerán en pantalla para su representación en el escenario.

Para ilustrar los pasos mejor, abordaremos un caso sencillo de ejemplo: un típico bidón de combustible o agua Wehrmachtskanister, posteriormente conocido como «JerryCan» . Como diseño y ayuda, podemos empezar por componer la imagen, utilizando tres capas, una para la imagen que quedará por encima del escenario, otra para la que quedará en el fondo del escenario, y otra con los rectángulos que representan las áreas bloqueadas a que entren otros objetos, personajes y proyectiles.

Aquí tenemos nuestra imagen con el bidón.

Creamos una clase nueva que herede de ObjetoEscenico. Creamos un constructor que recibe el parámetro Coordenada, que marca la posición donde se colocará en el escenario. Para  indicarle las dimensiones, utilizamos inmediatamente después la sentencia

private static int DIMENSIONX = 49;
private static int DIMENSIONY = 66;
/**
  *
  * @param coordenadaInicial coordenada donde se situará en el Escenario
  */
    public MiObjetoEscenico (Coordenada coordenadaInicial) {
        super(coordenadaInicial,
new Coordenada( coordenadaInicial.getX()+DIMENSIONX,
coordenadaInicial.getY()+DIMENSIONY ));

//otras inicializaciones…
}

El objeto escénico por defecto, tiene todo el área que ocupa, marcado como aŕea no permitida de movimientos. Podemos cambiar esto sobreescribiendo el método «hayColisión»:

public boolean hayColision(Rectangulo rectangulo){
      return false;
}

En nuestro caso de ejemplo, nos interesa que los personajes pasen por detrás del bidón, sin que sea un obstáculo a bordear, por tanto nunca colisionaran entre ellos, y debemos devolver «false» para todos los casos

Ahora toca el apartado gráfico. vamos a crearnos otra clase que herede de ObjetoEscenicoVista (que esta a su vez hereda de java.awt.image.BufferedImage)

public class MiObjetoEscenicoVista extends ObjetoEscenicoVista {
private BufferedImage imagen;

public MiObjetoEscenicoVista (ObjetoEscenico bidon, MediaTrackerHW mediaTracker){
super(bidon);
//–pasamos la ruta de la imagen que creamos a MediaTrackerHW para cargarla
imagen
= mediaTracker.addImage( «archivos_graficos/escenarios/objetosEscenicos/bidon.png»);

}

Ahora, como queremos que la imagen del bidón, aparezca delante de los personajes y del fondo del escenario, sobreeescribimos el método que llamará la pantalla cuando quiera pintar lo que va delante:

public BufferedImage getImagePost(){
return imagen;
}

Perfecto, ya tenemos las dos clases necesarias para nuestro nuevo objeto. Ahora sólo nos queda incluirlas en la FábricaObjetosEscenicos, que es a la clase que recurren los escenarios, cuando tienen que crear un objeto. Añadiríamos simplemente un par de líneas en el método creaObjetoEscenico:

else if (clase.equals(MiObjetoEscenico.class))
return new MiObjetoEscenico(coordenadaInicial);

y las siguientes dos en el método creaObjetoEscenicoVista

else if (clase.equals(MiObjetoEscenico.class))
return new MiObjetoEscenicoVista(objetoEscenico, mediaTracker);

LLegó la hora de probarla en un escenario, por ejemplo, utilizaremos el escenario «Nimega». Así pues, le decimos en que sitio del escenario debe aparecer el bidón, añadiendo la siguiente línea de código en el método inicializarObjetosEscenicos (y no hay que hacer nada en la parte visual gracias a la FábricaObjetosEscenicos)

public void inicializarObjetosEscenicos(){
getArrayObjetoEscenico().add( new MiObjetoEscenico( new Coordenada(1200,1940)));
}

 Resultado de poner nuestro bidon en el escenario

E incluso, si ponemos varios, podemos hacer composiciones con ellos, por ejemplo:

public void inicializarObjetosEscenicos(){
getArrayObjetoEscenico().add(new MiObjetoEscenico(new Coordenada(1200,1940)));
getArrayObjetoEscenico().add(new MiObjetoEscenico(new Coordenada(1150,1940)));
getArrayObjetoEscenico().add(new MiObjetoEscenico(new Coordenada(1175,1880)));
}

 Resultado de colocar adecuadamente varios bidones


Acerca de bisabel

Soy un Ingeniero Técnico afincado en Madrid. Interesado en el desarrollo de videojuegos de escritorio con java y la música electrónica.
Esta entrada fue publicada en Desarrollo y etiquetada , . Guarda el enlace permanente.

Deja un comentario