Anuncios

Bienvenidos sean a este post, hoy nos centraremos en la creacion de la clase encargada de los objetos del juego tal como lo hicimos en el proyecto anterior.

Anuncios

Al igual que hasta ahora creamos una nueva clase con las siguientes caracteristicas:

  • Nombre: GameObjeto
  • Tipo: Class
Anuncios

Una vez creada la nueva clase reemplazaremos el codigo generado con el siguiente:

package org.example.pepeaventura;

class GameObjeto {
    private Transformar mTransformar;
    private boolean mActivo = true;
    private String mTag;

    private ComponenteGraficos mComponenteGraficos;
    private ComponenteActualizar mComponenteActualizar;
}
Anuncios

En esta ocasion solo agregamos las variables miembros que vamos a utilizar en la clase, la primera sera para manejar la transformacion de los objetos, la segunda para ser si esta activo o no, y la tercera el tag o etiqueta que lo identifica, luego tendremos dos variables para instanciar a las interfaces que creamos en este post, nuestro siguiente paso sera agregar estos metodos:

    void setGraficos(ComponenteGraficos g,
                     Context c,
                     EspecJuegoObjeto espec,
                     PointF tamanoObjeto,
                     int pixelsPorMetro){
        mComponenteGraficos = g;
        g.inicializar(c, espec,
                tamanoObjeto, pixelsPorMetro);
    }

    void setMovimiento(ComponenteActualizar m){
        mComponenteActualizar = m;
    }

    void setTransformar(Transformar t){
        mTransformar = t;
    }
Anuncios
Anuncios

Estos tres metodos son utilizados en la clase GameObjetoFabrica, mas exactamente en el metodo crear, aunque no esten en el orden correcto vamos a comentarlos, el metodo setTransformar es el que esta en el primer switch donde verifica el tag (etiqueta) del objeto y esta dentro del default, para ser llamado en caso de no ser el jugador o el fondo, en este caso recibe un objeto de tipo Transformar y lo asignamos a mTransformar, si volvemos a GameObjetoFabrica cuando pasamos el atributo generamos un nuevo objeto de tipo Transformar y le pasamos los datos necesarios.

El metodo setGraficos se encargara de iniciar a nuestro grafico, este se encuentra en el bucle for de crear, donde recibiremos varios atributos, el primero en realidad sera uno de los componentes de los objetos, si vemos el unico caso que tenemos sera ComponenteGraficoBloqueInanimado y este al ser heredero de ComponenteGraficos no nos genera ningun error, luego tenemos el contexto, el objeto de las especificaciones, el tamaño del objeto y la ultima para escalar la imagen, dentro del bloque tomaremos al objeto pasado como atributo (g) y lo asignaremos a mComponenteGraficos y luego por medio de este lo iniciaremos con el metodo inicializar, con esto ya tenemos nuestro grafico “iniciado”.

Anuncios

Por ultimo tenemos el metodo setMovimiento que en realidad lo unico que hace es actualizar al objeto y moverlo en caso de que tenga un movimiento, este tambien se encuentra en el bucle for, y tal como lo dijimos antes se encargara de actualizar/mover los elementos (en caso de tener movimiento) y los objetos que recibe como atributo al ser herederos de ComponenteActualizar nos permite trabajar sin errores, procedamos a agregar los metodos faltantes:

    void dibujar(Canvas canvas,
                 Paint pincel,
                 Camara cam){
        mComponenteGraficos.dibujar(
                canvas,
                pincel,
                mTransformar,
                cam);
    }

    void actualizar(long fps,
                    Transformar jugadorTransformar){
        mComponenteActualizar.actualizar(
                fps,
                mTransformar,
                jugadorTransformar);
    }

    boolean chekaActivo(){
        return mActivo;
    }

    String getTag(){
        return mTag;
    }

    void setInactivo(){
        mActivo = false;
    }

    Transformar getTransformar(){
        return mTransformar;
    }

    void setTag(String tag){
        mTag = tag;
    }
Anuncios

El primer metodo se encarga de dibujar (realmente) a nuestro objeto, este se encarga de graficarlo por medio de dibujar en el objeto de tipo ComponenteGraficos, el siguiente metodo se encarga de actualizar a dicho objeto tambien por medio del metodo actualizar del objeto ComponenteActualizar, estos dos metodos se ejecutaran en cada frame del juego, los siguientes metodos son de tipo getter and setter:

  • chekaActivo, devuelve el valor de mActivo
  • getTag, devuelve el valor de mtag
  • setInactivo, establece a mActivo como false
  • getTransformar, devuelve el objeto mTransformar
  • setTag, establece el valor de mTag con el enviado como atributo
Anuncios

Con esto tenemos nuestra clase GameObjeto completa, veamos como quedo su codigo final por ahora:

GameObjeto.java

package org.example.pepeaventura;

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

import org.example.pepeaventura.especoj.EspecJuegoObjeto;

class GameObjeto {
    private Transformar mTransformar;
    private boolean mActivo = true;
    private String mTag;

    private ComponenteGraficos mComponenteGraficos;
    private ComponenteActualizar mComponenteActualizar;

    void setGraficos(ComponenteGraficos g,
                          Context c,
                          EspecJuegoObjeto espec,
                          PointF tamanoObjeto,
                          int pixelsPorMetro){
        mComponenteGraficos = g;
        g.inicializar(c, espec,
                tamanoObjeto, pixelsPorMetro);
    }

    void setMovimiento(ComponenteActualizar m){
        mComponenteActualizar = m;
    }

    void setTransformar(Transformar t){
        mTransformar = t;
    }

    void dibujar(Canvas canvas,
                 Paint pincel,
                 Camara cam){
        mComponenteGraficos.dibujar(
                canvas,
                pincel,
                mTransformar,
                cam);
    }

    void actualizar(long fps,
                    Transformar jugadorTransformar){
        mComponenteActualizar.actualizar(
                fps,
                mTransformar,
                jugadorTransformar);
    }

    boolean chekaActivo(){
        return mActivo;
    }

    String getTag(){
        return mTag;
    }

    void setInactivo(){
        mActivo = false;
    }

    Transformar getTransformar(){
        return mTransformar;
    }

    void setTag(String tag){
        mTag = tag;
    }
}
Anuncios

En resumen, hoy hemos visto nuestra clase GameObjeto, cual es su funcion, las propiedades o miembros que necesita y usa, los metodos necesarios para manipular estos objetos, ya sea desde otras clases (GameObjetoFabrica) hasta de forma interna, 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.

Donación

Es para mantenimento del sitio, gracias!

$1.00