Bienvenidos sean a este post, hoy haremos una clase similar a la vista en este post donde nos encargabamos de crear cada uno de los objetos del juego.
Para comenzar crearemos una nueva clase con las siguientes caracteristicas:
- Nombre: GameObjetoFabrica
- Tipo: Class
Nota: Recuerden que si no menciono el paquete se debe crear en el contenedor principal de las clases Java.
Una vez creada nuestra clase la modificaremos de la siguiente manera:
package org.example.pepeaventura;
import android.content.Context;
class GameObjetoFabrica {
private Context mContexto;
private GameEngine mGameEngineReferencia;
private int mPixelsPorMetro;
GameObjetoFabrica(Context contexto,
GameEngine gameEngine,
int pixelsPorMetro){
mContexto = contexto;
mGameEngineReferencia = gameEngine;
mPixelsPorMetro = pixelsPorMetro;
}
}
En este caso tendremos tres variables/objetos, una para el contexto, otra para la escala con la camara (como hasta ahora) y una para el GameEngine que todavia no creamos por ende nos quedara con error, esta ultima nos servira para pasar todos las entradas (o toques) que realice el jugador a las clases relacionadas para tales tareas, y tambien nos permitira registrarlas como observadores, por ultimo tenemos a nuestro constructor el cual solamente iniciara a estas variables por medio de los atributos recibidos, nuestro siguiente paso sera agregar el metodo crear, mediante el siguiente bloque:
GameObjeto crear(EspecJuegoObjeto espec,
PointF ubicacion){
GameObjeto objeto = new GameObjeto();
int mNumComponentes = espec.getComponentes().length;
objeto.setTag(espec.getTag());
switch (objeto.getTag()){
case "fondo":
break;
case "jugador":
break;
default:
objeto.setTransformar(new Transformar(
espec.getVelocidad(),
espec.getTamano().x,
espec.getTamano().y,
ubicacion));
break;
}
for(int i=0; i < mNumComponentes; i++){
switch (espec.getComponentes()[i]){
case "ComponenteGraficoBloqueInanimado":
objeto.setGraficos(
new ComponenteGraficoBloqueInanimado(),
mContexto,
espec,
espec.getTamano(),
mPixelsPorMetro);
break;
case "ComponenteActualizaBloqueInanimado":
objeto.setMovimiento(
new ComponenteActualizaBloqueInanimado());
break;
case "ComponenteActualizaBloqueDecorativo":
objeto.setMovimiento(
new ComponenteActualizaBloqueDecorativo());
break;
default:
break;
}
}
return objeto;
}
Este metodo sera de una clase que no existe pero pronto la crearemos, el cual recibira las especificaciones de los objetos y su ubicacion, en este caso primero crearemos un objeto del mismo tipo que el metodo, luego obtendremos el total de componentes u objetos, por ultimo estableceremos el tag para objeto (la primer variable creada), despues tendremos este switch:
switch (objeto.getTag()){
case "fondo":
break;
case "jugador":
break;
default:
objeto.setTransformar(new Transformar(
espec.getVelocidad(),
espec.getTamano().x,
espec.getTamano().y,
ubicacion));
break;
}
En este caso verifica el valor de tag, si es el fondo o el jugador ejecutara sus instrucciones pero por ahora los dejaremos en blanco, mas adelante las completaremos, por ultimo si el tag informado no coincide con ninguno de los anteriores procede a transformar a objeto pero de esto hablaremos mas adelante cuando generemos la clase faltante.
El siguiente paso sera un bucle que pasara por todos los componentes para agregar/iniciar a los mismos, en este caso como solo tenemos tres componentes pondremos tres case pero mas adelante agregaremos los faltantes, en todos los casos se llaman a metodos que no existen porque pertenecen a una clase que todavia no existe pero veamos este switch en particular:
switch (espec.getComponentes()[i]){
case "ComponenteGraficoBloqueInanimado":
objeto.setGraficos(
new ComponenteGraficoBloqueInanimado(),
mContexto,
espec,
espec.getTamano(),
mPixelsPorMetro);
break;
case "ComponenteActualizaBloqueInanimado":
objeto.setMovimiento(
new ComponenteActualizaBloqueInanimado());
break;
case "ComponenteActualizaBloqueDecorativo":
objeto.setMovimiento(
new ComponenteActualizaBloqueDecorativo());
break;
default:
break;
}
Observen como usamos a getComponentes para obtener cada uno de los componentes y usaremos a i para pasar por cada uno de los mismos, en el primer case se encargara de setear los graficos para el objeto y en este caso usaremos a la clase ComponenteGraficoBloqueInanimado, de este metodo hablaremos cuando generemos la clase, los siguientes dos case son para la actualizacion tanto del bloque inanimado y decorativo respectivamente y en este caso usaran el metodo setMovimiento donde solo recibira un objeto de sus respectivas clases, por ultimo devolvemos al objeto, con esto ya tenemos nuestra clase parcialmente terminada, en los proximos posts iremos agregando los componentes faltantes y en el proximo post crearemos la clase GameObjeto.
En resumen, hoy hemos creado la clase que sera de «fabrica» de los objetos de nuestro juego, tenemos un metodo encargado de crear a nuestros componentes o mejor dicho los objetos y sus respectivos componentes, espero les haya gustado sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.
Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.


Donación
Es para mantenimento del sitio, gracias!
$1.00
