Anuncios

Bienvenidos sean a este post, en este post crearemos la clase que vinimos usando hasta ahora como es Transformar.

Anuncios

En este caso vamos a hacer una clase mas especifica a diferencia del proyecto anterior que contenia metodos que los objetos no necesitaban pero eso lo hicimos para que el proyecto no se vuelva mas grande dado que manejabamos pocos elementos, por esta razon crearemos un clase muy simple que solo contendra los miembros y metodos que los objetos necesitan, y en caso de necesitar mas usaremos a extends para agregar los necesarios, comencemos agregando una nueva clase con las siguientes caracteristicas:

  • Nombre: Transformar
  • Tipo: Class
Anuncios

Una vez creada la nueva clase vamos a modificar el codigo con el siguiente:

package org.example.pepeaventura;

import android.graphics.PointF;
import android.graphics.RectF;

class Transformar {
    RectF mChocador;
    private PointF mUbicacion;
    private float mVelocidad;
    private float mObjetoAltura;
    private float mObjetoAncho;
    private PointF mPosicionInicial;
    private boolean mApuntandoArriba = false;
    private boolean mApuntandoAbajo = false;
    private boolean mMirandoDerecha = true;
    private boolean mApuntandoIzquierda = false;
    private boolean mApuntandoDerecha = false;

    Transformar(float velocidad, 
                float objetoAncho, 
                float objetoAltura, 
                PointF posicionInicial){
        mChocador = new RectF();
        mVelocidad = velocidad;
        mObjetoAltura = objetoAltura;
        mObjetoAncho = objetoAncho;
        mUbicacion = posicionInicial;
        mPosicionInicial = new PointF(
                mUbicacion.x, mUbicacion.y);
    }
}
Anuncios

En este caso tendremos primero nuestras variables para esta clase:

Anuncios
  • mChocador, la usaremos para la deteccion de colisiones.
  • mUbicacion, para saber la posicion de nuestro objeto
  • mVelocidad, determina la velocidad del objeto
  • mObjetoAltura, determina la altura del objeto
  • mObjetoAncho, determina el ancho del objeto
  • mPosicionInicial, determina cual va a ser la posicion de inicio del objeto
  • mApuntandoArriba, determina si esta apuntando arriba
  • mApuntandoAbajo, idem al anterior pero si es para abajo
  • mMirandoDerecha, determina si mirando a la derecha
  • mApuntandoIzquierda, determina si esta apuntando a la izquierda
  • mApuntandoDerecha, idem al anterior pero a la derecha
Anuncios

Lo siguiente es el constructor que recibira cuatro argumentos:

  • velocidad
  • objetoAncho
  • objetoAltura
  • posicionInicial
Anuncios

Primero crearemos el objeto mChocador mediante el constructor de la clase, despues iniciaremos a los siguientes miembros con los atributos recibidos respectivamente:

  • mVelocidad
  • mObjetoAncho
  • mObjetoAltura
  • mUbicacion
Anuncios

En este caso no iniciamos a mPosicionInicial porque en teoria al iniciarse la primera vez deberia coincidir con mUbicacion pero si despues iniciamos a mPosicionInicial mediante los ejes X e Y de mUbicacion, con esto concluimos el constructor pasemos a agregar el metodo encargado de actualizar las colisiones:

    public void actualizaChocador(){
        mChocador.top = mUbicacion.y;
        mChocador.left = mUbicacion.x;
        mChocador.bottom = mChocador.top + mObjetoAltura;
        mChocador.right = mChocador.left + mObjetoAncho;
    }
    
    public RectF getChocador(){
        return mChocador;
    }
Anuncios
Anuncios

El primer metodo sera el encargado de establecer los cuatro valores de RectF en mChocador, primero establecemos el top y left en base a los ejes X e Y de mUbicacion respectivamente y despues para bottom y right utilizamos los valores antes establecidos con el incremento de la altura y el ancho del objeto tambien respectivamente, por ultimo tendremos otro metodo encargado de devolvernos al objeto mChocador, nuestro siguiente paso sera agregar los metodos encargados de la transformacion para eso primero agregaremos este bloque:

    void apuntarArriba(){
        mApuntandoArriba = true;
        mApuntandoAbajo = false;
    }

    void apuntarAbajo(){
        mApuntandoAbajo = true;
        mApuntandoArriba = false;
    }

    void apuntarDerecha(){
        mApuntandoDerecha = true;
        mApuntandoIzquierda = false;
        mMirandoDerecha = true;
    }

    void apuntarIzquierda(){
        mApuntandoDerecha = false;
        mApuntandoIzquierda = true;
        mMirandoDerecha = false;
    }

    boolean apuntandoArriba(){
        return mApuntandoArriba;
    }
    
    boolean apuntandoAbajo(){
        return mApuntandoAbajo;
    }
    
    boolean apuntandoDerecha(){
        return mApuntandoDerecha;
    }
    
    boolean apuntandoIzquierda(){
        return mApuntandoIzquierda;
    }
Anuncios
Anuncios

En este caso los primeros cuatro metodos se encargan de establecer hacia donde esta apuntando, es decir hacia arriba, abajo, derecha o izquierda, en los dos primeros metodos establece como verdadero hacia donde sea, por ejemplo si mira hacia arriba setea a mApuntandoArriba como true y mApuntandoAbajo como false, lo contrario si esta apuntando hacia abajo, en el caso de izquierda y derecha es similar pero tambien establecemos si esta mirando a la derecha o no, en el caso de estar apuntando a la derecha establece a mMirandoDerecha como true si esta apuntando a la izquierda lo establece como false, los siguientes cuatro metodos son getters que usamos para recuperar los valores anteriormente establecidos, vamos a agregar el ultimo bloque de metodos:

    void detenerHorizontal(){
        mApuntandoIzquierda = false;
        mApuntandoDerecha = false;
    }

    void detenerMovIzquierda(){
        mApuntandoIzquierda = false;
    }

    void detenerMovDerecha(){
        mApuntandoDerecha = false;
    }

    boolean getMirandoDerecha(){
        return mMirandoDerecha;
    }
    
    float getVelocidad(){
        return mVelocidad;
    }

    PointF getUbicacion(){
        return mUbicacion;
    }

    PointF getTamano(){
        return new PointF(
                (int) mObjetoAncho,
                (int) mObjetoAltura);
    }
    
    PointF getPosicionInicial(){
        return mPosicionInicial;
    }
Anuncios

El primer metodo se encarga todos los movimientos de tipo horizontal, estableciendo como false a ambas variables, el siguiente metodo detiene el desplazamiento a la izquierda y el tercero a la derecha, los siguientes metodos son todos getter:

  • getMirandoDerecha, devuelve el valor de mMirandoDerecha
  • getVelocidad, devuelve el valor de mVelocidad
  • getUbicacion, devuelve el valor de mUbicacion
  • getTamano, devuelve un objeto de tipo PointF que crea con los valores mObjetoAltura y mObjetoAncho
  • getPosicionInicial, devuelve el valor de mPosicionInicial
Anuncios

Con esto ya tenemos todos los elementos basicos que van a utilizar los objetos que usen a Transformar y en caso de necesitar mas, y los necesitaremos, se extendera a esta clase con otras, veamos como quedo el codigo final hasta ahora:

Transformar.java

package org.example.pepeaventura;

import android.graphics.PointF;
import android.graphics.RectF;

class Transformar {
    RectF mChocador;
    private PointF mUbicacion;
    private float mVelocidad;
    private float mObjetoAltura;
    private float mObjetoAncho;
    private PointF mPosicionInicial;
    private boolean mApuntandoArriba = false;
    private boolean mApuntandoAbajo = false;
    private boolean mMirandoDerecha = true;
    private boolean mApuntandoIzquierda = false;
    private boolean mApuntandoDerecha = false;

    Transformar(float velocidad,
                float objetoAncho,
                float objetoAltura,
                PointF posicionInicial){
        mChocador = new RectF();
        mVelocidad = velocidad;
        mObjetoAltura = objetoAltura;
        mObjetoAncho = objetoAncho;
        mUbicacion = posicionInicial;
        mPosicionInicial = new PointF(
                mUbicacion.x, mUbicacion.y);
    }

    public void actualizaChocador(){
        mChocador.top = mUbicacion.y;
        mChocador.left = mUbicacion.x;
        mChocador.bottom = mChocador.top + mObjetoAltura;
        mChocador.right = mChocador.left + mObjetoAncho;
    }

    public RectF getChocador(){
        return mChocador;
    }

    void apuntarArriba(){
        mApuntandoArriba = true;
        mApuntandoAbajo = false;
    }

    void apuntarAbajo(){
        mApuntandoAbajo = true;
        mApuntandoArriba = false;
    }

    void apuntarDerecha(){
        mApuntandoDerecha = true;
        mApuntandoIzquierda = false;
        mMirandoDerecha = true;
    }

    void apuntarIzquierda(){
        mApuntandoDerecha = false;
        mApuntandoIzquierda = true;
        mMirandoDerecha = false;
    }

    boolean apuntandoArriba(){
        return mApuntandoArriba;
    }

    boolean apuntandoAbajo(){
        return mApuntandoAbajo;
    }

    boolean apuntandoDerecha(){
        return mApuntandoDerecha;
    }

    boolean apuntandoIzquierda(){
        return mApuntandoIzquierda;
    }

    void detenerHorizontal(){
        mApuntandoIzquierda = false;
        mApuntandoDerecha = false;
    }

    void detenerMovIzquierda(){
        mApuntandoIzquierda = false;
    }

    void detenerMovDerecha(){
        mApuntandoDerecha = false;
    }

    boolean getMirandoDerecha(){
        return mMirandoDerecha;
    }

    float getVelocidad(){
        return mVelocidad;
    }

    PointF getUbicacion(){
        return mUbicacion;
    }

    PointF getTamano(){
        return new PointF(
                (int) mObjetoAncho,
                (int) mObjetoAltura);
    }

    PointF getPosicionInicial(){
        return mPosicionInicial;
    }
}
Anuncios

En resumen, hoy hemos generado nuestra clase Transformar que hemos utilizado en el proyecto anterior, hemos agregado los miembros y los metodos necesarios, tambien hemos creado todos los metodos encargados de mover en las cuatro direcciones en los objetos y como detenerlos, 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