Anuncios

Bienvenidos sean a este post, hasta el post anterior hemos hecho gran parte del juego pero a partir de este nos centraremos en los ultimos detalles y aqui nos centraremos en las plataformas moviles.

Anuncios

Si bien ya hemos creado las especificaciones cuando hicimos el paquete especoj, nuestro siguiente paso sera crear la clase que se encargara de mover a nuestra plataforma y para ello haremos una nueva clase con las siguientes caracteristicas:

  • Nombre: ComponenteActualizaBloqueMovible
  • Tipo: Class
Anuncios

Nuestro siguiente paso sera modifcar el codigo generado por el siguiente:

package org.example.pepeaventura;

import android.graphics.PointF;

class ComponenteActualizaBloqueMovible
        implements ComponenteActualizar {

    @Override
    public void actualizar(
            long fps,
            Transformar t,
            Transformar jugadorTransformar){

        PointF ubicacion = t.getUbicacion();

        if (t.apuntandoArriba()){
            ubicacion.y -= t.getVelocidad() / fps;
        } else if (t.apuntandoAbajo()){
            ubicacion.y += t.getVelocidad() / fps;
        } else {
            t.apuntarAbajo();
        }

        if (t.apuntandoArriba() && ubicacion.y
                <= t.getPosicionInicial().y){
            t.apuntarAbajo();
        } else if (t.apuntandoAbajo() && ubicacion.y
                >= (t.getPosicionInicial().y
                + t.getTamano().y * 10)) {
            t.apuntarArriba();
        }

        t.actualizaChocador();
    }
}
Anuncios

Para esta clase implementaremos la interfaz ComponenteActualizar, y para poder implementarla debemos definir al metodo actualizar, lo cual sera nuestro siguiente paso, para este metodo recibiremos tres atributos, nuestro siguiente paso sera crear una variable para poder almacenar la posicion del objeto, esto lo haremos gracias al metodo getUbicacion del objeto Transformar, luego tendremos este condicional:

        if (t.apuntandoArriba()){
            ubicacion.y -= t.getVelocidad() / fps;
        } else if (t.apuntandoAbajo()){
            ubicacion.y += t.getVelocidad() / fps;
        } else {
            t.apuntarAbajo();
        }
Anuncios

En este condicional primero verificamos si nuestro objeto esta apuntando hacia arriba, en caso de ser verdadero quiere decir que el objeto esta subiendo y por ende disminuiremos el valor del eje Y, en el segundo caso (es decir que esta apuntando hacia abajo) incrementaremos el valor del eje Y porque en teoria nuestro objeto esta bajando, por ultimo tenemos un else el cual lo usaremos para la primera actualizacion del juego y por ende lo haremos apuntar hacia abajo para que utilice los ciclos anteriores, luego tendremos este condicional:

        if (t.apuntandoArriba() && ubicacion.y
                <= t.getPosicionInicial().y){
            t.apuntarAbajo();
        } else if (t.apuntandoArriba() && ubicacion.y
                >= (t.getPosicionInicial().y
                + t.getTamano().y * 10)) {
            t.apuntarArriba();
        }
Anuncios

Este condicional sera la segunda parte de nuestra magia porque se encargara de monitorear si alcanzamos los limites superiores e inferiores del movimiento de nuestra plataforma, en el primer condicional verificamos si primero esta apuntando hacia arriba y el valor del eje Y de la ubicacion es menor o igual a la eje Y de la posicion inicial del objeto Transformar, en caso de ser cierto haremos apuntar hacia abajo al objeto, o podemos decir que el objeto comenzara a descender.

Anuncios

La siguiente condicion verifica lo opuesto, es decir que si esta apuntando hacia abajo y si el eje Y de la ubicacion es mayor o igual al valor obtenido entre la suma del eje Y de la posicion inicial y el valor del eje Y del tamaño del objeto multiplicado por diez, en caso de cumplirse la condicion modifica el apuntar hacia arriba y como en el caso anterior nuestra plataforma procede a desplazarse hacia arriba, nuestra ultima linea solo se encarga de actualizar nuestras modificaciones realizadas anteriormente, con esto ya podemos tener el movimiento de nuestras plataformas en cada uno de los niveles.

Anuncios

Con esto concluimos nuestra clase pero ahora procederemos a implementarla en nuestra fabrica y para ello debemos ir a nuestra clase GameObjetoFabrica, en el switch donde estan los componentes en cada uno de los case agregaremos el siguiente case:

                case "ComponenteActualizaBloqueMovible":
                    objeto.setMovimiento(
                            new ComponenteActualizaBloqueMovible());
                    break;
Anuncios

Este case se encarga de crear el nuevo objeto para el movimiento de la plataforma, veamos como quedo este switch en la clase GameObjetoFabrica:

            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;
                case "ComponenteEntradaJugador":
                    objeto.setTransformarJugadorEntrada(
                            new ComponenteEntradaJugador(
                                    mGameEngineReferencia));
                    break;
                case "ComponenteGraficosAnimados":
                    objeto.setGraficos(new ComponenteGraficosAnimados(),
                            mContexto,
                            espec,
                            espec.getTamano(),
                            mPixelsPorMetro);
                    break;
                case "ComponenteActualizaJugador":
                    objeto.setMovimiento(
                            new ComponenteActualizaJugador());
                    break;
                case "ComponenteGraficosFondo":
                    objeto.setGraficos(new ComponenteGraficosFondo(),
                            mContexto,
                            espec,
                            espec.getTamano(),
                            mPixelsPorMetro);
                    break;
                case "ComponenteActualizarFondo":
                    objeto.setMovimiento(
                            new ComponenteActualizarFondo());
                    break;
                case "ComponenteActualizaBloqueMovible":
                    objeto.setMovimiento(
                            new ComponenteActualizaBloqueMovible());
                    break;
                default:
                    break;
            }
Anuncios

Nuestra siguiente modificacion sera en la clase ManagerNivel donde deberemos ir al switch que se encarga de convertir las “losas” en los graficos, para ello debemos buscar este case dentro de este switch:

                    case 'm':
                        break;
Anuncios

Y lo modificaremos de la siguiente manera:

                    case 'm':
                        objetos.add(fabrica.crear(new EspecPlataformaMovible(),
                                coords));
                        break;
Anuncios

Con este case crearemos el nuevo objeto en el nivel, es decir que ahora tendremos tambien las plataformas moviles a nuestra disposicion pero como todavia no tenemos hecho los metodos de deteccion seguimos cayendo infinitamente y no llegamos a apreciar a las mismas, en el proximo post comenzaremos con el ultimo tema de este juego.

Anuncios

En resumen, hoy hemos visto la clase encargada de mover las plataformas movibles, hemos realizado las iimplementaciones necesarias, en este caso no hemos necesitado crear las especificaciones porque ya las hemos realizado en los posts anteriores y este solamente se encarga de moverlos, hechos las modificaciones necesarias tanto en la fabrica como en la clase encargada de los niveles para generarlas, solo nos resta detectar las colisiones para no caer eternamente, 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