Anuncios

Bienvenidos sean a este post, hoy nos centraremos en la clase que sera la fabrica de todo lo que generamos en los posts anteriores.

Anuncios

Para lograr esto nuestra nueva clase utilizara a las clases basadas en ObjetoEspec para crear las instancias de GameObjeto con los componentes correctos, para ello vamos a crear una nueva clase con los siguientes parametros:

  • Nombre: GameObjetoFabrica
  • Tipo: Class
Anuncios

Una vez creada nuestra nueva clase modificaremos el codigo generado por el siguiente:

package org.example.invasores;

import android.content.Context;
import android.graphics.PointF;

class GameObjetoFabrica {
    private Context mContexto;
    private PointF mTamanoPantalla;
    private GameEngine mGameEngineReferencia;

    GameObjetoFabrica(Context c, 
                      PointF tamanoPantalla, 
                      GameEngine gameEngine){
        this.mContexto = c;
        this.mTamanoPantalla = tamanoPantalla;
        this.mGameEngineReferencia = gameEngine;
    }
}
Anuncios

Los tres objetos que tenemos al comienzo seran para:

  • mContexto, para almacenar el contexto
  • mTamanoPantalla, almacena el tamaño de la pantalla
  • mGameEngineReferencia, guarda la referencia a la clase GameEngine
Anuncios

Lo siguiente sera el constructor de nuestra clase que recibira tres valores y los asignara a nuestros objetos respectivamente, nuestro siguiente paso sera agregar al metodo que hara la verdadera magia dentro de nuestra clase:

    GameObjeto crear(ObjetoEspec espec){

        GameObjeto objeto = new GameObjeto();
        int numComponentes = espec.getComponentes().length;
        final float OCULTO = -2000f;
        objeto.setTag(espec.getTag());
        float velocidad = mTamanoPantalla.x / espec.getVelocidad();

        PointF tamanoObjeto = new PointF(
                mTamanoPantalla.x / espec.getEscala().x,
                mTamanoPantalla.y / espec.getEscala().y);

        PointF ubicacion = new PointF(OCULTO,OCULTO);

        objeto.setTransformar(new Transformar(
                velocidad,
                tamanoObjeto.x,
                tamanoObjeto.y,
                ubicacion,
                mTamanoPantalla));

        for(int i=0; i < numComponentes; i++){
            switch (espec.getComponentes()[i]){
                case "ComponenteEntradaJugador":
                    objeto.setEntrada(new ComponenteEntradaJugador(
                            mGameEngineReferencia));
                    break;
                case "ComponentesGraficosStd":
                    objeto.setGraficos(new ComponentesGraficosStd()
                            ,mContexto,espec,tamanoObjeto);
                    break;
                case "ComponenteJugadorMovimiento":
                    objeto.setMovimiento(new ComponenteJugadorMovimiento());
                    break;
                case "ComponenteGeneraJugador":
                    objeto.setGenerador(new ComponenteGeneraJugador());
                    break;
                case "ComponenteLaserMovimiento":
                    objeto.setMovimiento(new ComponenteLaserMovimiento());
                    break;
                case "ComponenteGeneraLaser":
                    objeto.setGenerador(new ComponenteGeneraLaser());
                    break;
                case "ComponentesGraficosFondo":
                    objeto.setGraficos(new ComponentesGraficosFondo(),
                            mContexto,espec,tamanoObjeto);
                    break;
                case "ComponenteFondoMovimiento":
                    objeto.setMovimiento(new ComponenteFondoMovimiento());
                    break;
                case "ComponenteGeneraFondo":
                    objeto.setGenerador(new ComponenteGeneraFondo());
                    break;
                default:
                    break;
            }
        }
        return objeto;
    }
Anuncios
Anuncios

En este metodo primero crearemos un objeto de tipo GameObjeto, esta sera la encargada de crear el objeto en el juego ya sea la nave del jugador, alguno de los enemigos, el fondo, etc, la siguiente linea sera la encargada de contar la cantidad de componentes del objeto, la tercer linea sera una constante con un valor pero luego veremos para que lo usaremos, la cuarta linea o variable sera utilizada para asignar el tag dentro del GameObjeto que creamos al principio, la siguiente linea a esta sera para obtener la velocidad en base a la division del total del ancho de la pantalla por la velocidad entre las especificaciones.

Anuncios
Anuncios

Despues tendremos un objeto de tipo PointF y la usaremos para almacenar el tamaño del objeto y lo configura en base al tamaño de la pantalla, la siguiente linea establece una ubicacion por fuera de la pantalla por medio del valor en OCULTO, por ultimo ejecutamos a setTransformar enviando todos los valores que definimos hasta ahora, con esto ya tenemos a Transformar completamente iniciada, pasemos al siguiente paso que son los componentes.

Anuncios
Anuncios

Para construir cada uno de los componentes de los objetos utilizaremos un bucle for donde pasara por todos los componentes, para ello usaremos el numComponentes porque este almacena la cantidad de elementos almacenados en las especificaciones (espec), luego usaremos un switch para verificar cada uno de los componentes, si observan cada case es muy similar porque verifica el nombre del componente para luego establecer el componente correspondiente al objeto y de esta forma cada objeto tendra solamente los componentes que necesita, por ultimo siempre devolveremos el objeto que hemos creado.

Anuncios

Este metodo no es muy complejo pero pareciese debidoael bucle for que tenemos, con todo esto ya esta preparada la clase encargada de crear los objetos en pantalla y esta lista para cuando necesitemos implementar a los enemigos pero este juego todavia no funciona porque necesitamos crear una clase mas de la cual hablaremos en el proximo post.

Anuncios

En resumen, hoy hemos creado a la fabrica que se encargara de crear los objetos de tipo GameObjeto en nuestro juego, hemos visto como primero obtiene las especificaciones y componentes, despues tambien vimos como hacemos para asignar al objeto en cuestion solamente los componentes que debe utilizar, 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.

Anuncios

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.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00