• No se han encontrado resultados

CAPITULO 4. DESARROLLO DE LA LÓGICA DE CUBE’S WAR

4.3 I MPLEMENTACIÓN

4.3.3 Detalles de la implementación

4.3.3.7 Carga

Se explica de forma resumida qué es lo que se produce durante la carga del entorno mencionado, dado que no incumbe a este proyecto, y de manera más amplia cómo se emplea ese tiempo de carga para mostrar una pantalla en la que se explica cómo jugar al videojuego.

En Videojuego se crea una distribución de la pantalla mediante código, al contrario que los demás casos que cargaban recursos layout XML. Se utiliza un FrameLayout que se caracteriza por que a medida que se añaden elementos a la pantalla, se van disponiendo éstos encima del anterior provocando que puedan tapar a los que se encuentren por debajo. Toda esta distribución conduce a la que se mostrará al usuario durante el desarrollo de la partida.

El primer elemento y el más importante que se agrega y que por lo tanto los demás le cubrirán, es un GLView, es decir, una vista personalizada donde se visualiza el escenario del juego, el personaje que el usuario controla y los enemigos que le rodeen. Su tamaño es de las mismas dimensiones que el del dispositivo móvil. Posteriormente, se incorporan más elementos que no se describen.

La carga de GLView necesita mucho tiempo porque prepara el entorno 3D del juego.

Éste define su propia clase, la cual extiende de SurfaceView, que es un tipo especial de vista que se utiliza para 3D y se utiliza para cualquier vista que utilice OpenGL, como en este caso. SurfaceView utiliza a su vez una Surface, que es un lugar para el dibujo, como Canvas, excepto que es implementado por el hardware 3D. La superficie se establecerá cuando la Activity Videojuego esté funcionando en primer plano y cuando se produzca, creará su propio hilo para el dibujado de la pantalla. En la clase GLView se

90

declara un objeto hilo llamado glThread de la clase Lógica, pero que ésta hereda de Dibujar que es la que verdad extiende de Thread. Cuando la superficie OpenGL se ha creado, comienza el hilo glThread para manejar el dibujado de la pantalla, y cuando la superficie esté a punto de ser destruida, finalizará.

En referencia al presente proyecto, se explican los pasos que se realizan para la carga del entorno.

En la clase Videojuego:

1. Se inicializa el objeto de la clase LogicaProtagonista con las posiciones iniciales de éste sobre el escenario, uno de la clase Cámara, un objeto Lógica y la superficie de dibujado GLView.

En la clase GLView:

2. Cuando la Surface halla sido creada se inicia el hilo de Dibujado.

Posteriormente en la clase Dibujar y Lógica:

3. Se inicializa a “0” todos los valores de la matriz de enteros mundo[][][], mediante el método inicializaMatriz de la clase LogicaEscenarioX.

4. La matriz anterior se carga de valores en determinadas posiciones que conformarán el escenario por donde debe avanzar el personaje, los objetos pincho, la llave que se debe de coger, la meta… Se realiza en las clases LogicaEscenario1, LogicaEscenario2 o LogicaEscenario3 en función de la variable numeroEscenario de Proyecto.

5. Se crea un array de LogicaEnemigo en función del número de enemigos, se generan sus posiciones iniciales y el tipo de LogicaEnemigo que son, de forma aleatoria mediante la llamada al método dameAleatorios de la clase Lógica, aunque también está preparado para poder colocar los enemigos en posiciones determinadas. Éste devuelve un array de números siendo los tres primeros las posiciones iniciales de éstos, comprendidos entre las dimensiones máximas y mínimas de cada eje de los escenarios. Estos deben cumplir que en esas posiciones debe de existir un “1” en la matriz del escenario correspondiente, que encima de esa posición no se encuentre un objeto pincho, es decir, que no valga

“3” y que tampoco valga “1”. La posición X de estos enemigos se establece de tal modo que no puedan estar muy cerca del usuario dado que enseguida se produciría su eliminación. Una vez conseguido, será la posición del LogicaEnemigo inicial. Y el último número es el correspondiente al tipo de LogicaEnemigo que debe ser.

6. Se habilita la variable marcha de la Activity Videojuego para dar por finalizado la carga de los elementos y de este modo cerrar la pantalla que genera el hilo de Carga.

Hasta que se produce este último paso, por ser el tiempo en que se carga el entorno y de la vista 3D amplio, se decidió en emplearlo para mostrar una ventana con información

91 de cómo jugar al videojuego. Para este cometido se crea un nuevo hilo junto con el de dibujado de glThread, hasta que éste último haya realizado la inicialización y carga de todo lo citado con anterioridad y pueda el usuario comenzar la partida. Por lo tanto, desde que el jugador presiona el botón Jugar del menú principal se crean esos dos hilos, y el principal seguirá con su ejecución normal, dado que si se finaliza, también lo hará la aplicación. Estos son los tres hilos existentes en la aplicación:

Figura 77. Hilos de ejecución en la aplicación

El hilo de Dibujado correspondería al hilo de glThread creado, que realiza de forma no visible al usuario la inicialización y carga de los objetos necesarios para poder comenzar una partida.

Durante estos procesos, el hilo de Carga muestra una ventana, debido a que un solo hilo no podría realizar ambas cosas. Esta ventana es un Dialog personalizado al estilo del videojuego, el cual carga su distribución mediante un recurso layout XML llamado progress.xml. Éste contiene elementos como el icono de la aplicación, el titulo del Dialog, un ProgressBar para dar la sensación de carga, un TextView y una ImageView que es la que muestra la información relacionada con el cómo se debe jugar a la aplicación.

Esta ventana es visible solo durante la carga, en el que el hilo se encuentra esperando a que el boolean marcha de la Activity Proyecto, cuyo significado es el estado en el que se encuentra la carga de los elementos del hilo de Dibujado, se encuentre habilitado para poder cerrarla. Cuando suceda, paso 6, saca el Dialog de la pantalla porque detrás de éste ya se podrá visualizar el entorno de desarrollo del juego.

Figura 78. Captura de carga

- Pausar

- Superar Escenario - Ser eliminado Hilo

de Carga

Hilo Principal de ejecución

Hilo de Dibujado Jugar

92

Una vez llegados a este punto, el hilo glThread inicia el bucle principal de éste, donde se inicia la lógica principal del videojuego Cube´s War, siendo la parte fundamental para el presente proyecto.