• No se han encontrado resultados

Utilidades

In document UNIVERSIDAD DE ALMERÍA (página 118-121)

1. Introducción

4.3. Desarrollo del proyecto

4.3.7. Utilidades

En este bloque se explican las principales utilidades que proporciona DroidEngine2D. Estas utilidades son, en su mayoría, simplemente componentes o funciones que se han

implementado durante el desarrollo del motor y que se han utilizado para facilitar la implementación de algunas características del mismo. Aunque algunas de ellas se han implementado con intención de que el usuario las utilice en sus juegos si esto le facilita el trabajo.

4.3.7.1. Utilidades para trabajar con tiempos

En esta sección se explica el análisis, el diseño, la implementación y las pruebas de las utilidades para trabajar con tiempos que proporciona DroidEngine2D.

4.3.7.1.1. Análisis

En muchos videojuegos es necesario trabajar con tiempos, y uno de los principales usos de esta característica sería un simple contador de tiempo transcurrido. Por tanto, DroidEngine2D proporciona al usuario un contador de tiempo con el objetivo de facilitarle esta tarea.

4.3.7.1.2. Diseño e implementación

El contador de tiempo se ha implementado en la clase TimeCounter, y su funcionamiento es muy sencillo. Tan solo hay que inicializarlo y llamar al método update() cuando se desee. También es posible reiniciar el contador con el método reset().

El contador almacena el tiempo transcurrido desde que se inició hasta la última llamada a update() realizada.

La clase TimeCounter, obviamente, también posee métodos para acceder al tiempo transcurrido. Estos métodos son getMilliseconds(), getSeconds(), getMinutes(), getHours() y getDays().

Para todas estas conversiones de tiempo se han utilizado las constantes definidas en la clase TimeConstants.

4.3.7.1.3. Pruebas

Las pruebas del contador de tiempo se han llevado a cabo, en su mayoría, haciendo uso de la clase Log proporcionada por el SDK de Android, que permite imprimir mensajes de depuración. Y en una de las demos del motor también se hace uso de TimeCounter para hacer que una pelota sea inmune a colisiones durante cierto tiempo tras haber colisionado con un objeto.

4.3.7.2. Utilidades para trabajar con vectores y matrices

En esta sección se explica el análisis, el diseño, la implementación y las pruebas de las utilidades para trabajar con vectores y matrices que proporciona DroidEngine2D.

Capítulo 4. DroidEngine2D.

4.3.7.2.1. Análisis

En la parte de gráficos del motor se hace bastante uso de vectores de dos y tres coordenadas, por lo que era necesario crear utilidades que permiten trabajar con dichos vectores.

Y, en cuanto a las matrices, tan solo es necesario trabajar con matrices de 4x4 elementos para representar las matrices con las que trabaja OpenGL, por lo que el desarrollo se ha limitado exclusivamente a este aspecto.

Por último, era necesario implementar una alternativa a la función rotateM de la clase Matrix proporcionada por el SDK de Android, puesto que en la implementación de dicha función en las versiones anteriores a la API 10 (Android 2.3.3), se creaba una matriz auxiliar en tiempo de ejecución cada vez que se llamaba. Y, DroidEngine2D soporta desde la API 9 en adelante (aunque inicialmente soportaba desde la API 8, que corresponde a Android 2.2).

4.3.7.2.2. Diseño e implementación

Las utilidades que permiten trabajar con vectores de dos y tres dimensiones se han implementado en las clases Vector2 y Vector3. Estas clases proporcionan métodos que permiten realizar algunas de las operaciones más comunes con vectores de dos y tres coordenadas.

En cuanto a las matrices de 4x4, se ha implementado la clase Matrix4, que proporciona métodos para trabajar con matrices de 4x4 elementos tipo float. Esta clase posee los principales métodos necesarios para trabajar con matrices en OpenGL (translación, rotación, escala, perspectiva, etc.). La implementación de todas estas operaciones se ha realizado haciendo uso de la clase Matrix del SDK de Android. DroidEngine2D también proporciona la clase TransformUtilities, que permite aplicar transformaciones (translación, rotación y escala) sobre matrices de 4x4.

Y por último, la implementación alternativa del método rotateM de la clase Matrix se ha realizado en la clase MatrixFix. El método rotateM implementado en MatrixFix tiene el mismo comportamiento que el método rotateM de Matrix, la única diferencia es que el proporcionado por DroidEngine2D no crea objetos en tiempo de ejecución, mientras que el de la clase Matrix, en versiones antiguas del SDK de Android, sí.

4.3.7.2.3. Pruebas

El uso de vectores y matrices se realiza de forma intensiva en todo el motor, por lo que inicialmente se realizaron múltiples pruebas haciendo uso de la clase Log proporcionada por el SDK de Android y, posteriormente, en las demos se puede observar que todo funciona tal y como se espera.

4.3.7.3. Utilidades específicas de Android

En esta sección se explica el análisis, el diseño, la implementación y las pruebas de las utilidades específicas de Android que proporciona DroidEngine2D.

4.3.7.3.1. Análisis

Las utilidades específicas de Android proporcionadas por DroidEngine2D son dos, poder detectar si un dispositivo soporta OpenGL ES 2.0 y poder detectar la orientación por defecto del dispositivo.

Actualmente casi el 100% de dispositivos soportan OpenGL ES 2.0. No obstante, el emulador de Android no lo soporta en todas las versiones, y algunos dispositivos antiguos tampoco, por lo que poder comprobar si el dispositivo soporta OpenGL ES 2.0 es necesario.

En cuanto a detectar la orientación por defecto del dispositivo, es necesario por los motivos expuestos en el apartado 4.3.5.3.2, donde se explica el sistema de coordenadas por defecto de los sensores.

4.3.7.3.2. Diseño e implementación

Ambas utilidades se han implementado en la clase ActivityUtilities de DroidEngine2D y se pueden utilizar llamando a los métodos detectOpenGLES20 y getDefaultOrientationOfDevice, respectivamente.

4.3.7.3.3. Pruebas

Las pruebas del método que permite detectar si un dispositivo soporta OpenGL ES 2.0 o no, se han realizado ejecutando el motor en un dispositivo antiguo sin soporte para OpenGL ES 2.0 y en un dispositivo más moderno que sí soporta OpenGL ES 2.0. Se ha podido comprobar que el funcionamiento es el esperado en ambos casos.

Y las pruebas de la obtención de la orientación por defecto del dispositivo se han realizado mediante mensajes de depuración, utilizando la clase Log proporcionada por el SDK de Android. Y el funcionamiento correcto se puede comprobar en las demos que hacen uso del acelerómetro.

In document UNIVERSIDAD DE ALMERÍA (página 118-121)