En esta serie de tutoriales, crearemos una aplicación de simulador de vuelo utilizando ShiVa3D Suite. Un simulador de vuelo es un ejemplo interesante de programación en 3D. Para construir esta aplicación, cubriremos todos los temas necesarios para crear juegos 3D, aplicaciones educativas y aplicaciones 3D novedosas. El simulador integrado en esta serie se implementará y probará en un Motorola Droid con Android 2.2, un iPod Touch con iOS 4.3 y un iPad 2 con iOS 4.3..
Con Shiva3D Suite, un programador no necesita escribir ningún código específico de Android o iOS. Hay dos pasos principales para crear una aplicación 3D multiplataforma con Shiva3D Suite: (1) Desarrolle los aspectos visuales de la aplicación y el código correspondiente usando ShiVa Editor. (2) Convierta el archivo binario resultante en un ejecutable específico de la plataforma (por ejemplo, un archivo apk para Android) o un archivo de proyecto (por ejemplo, un proyecto Xcode para iPad) utilizando la Herramienta de creación de ShiVa.
ShiVa Editor es una poderosa herramienta para desarrollar aplicaciones 3D. Entre las funciones disponibles en la herramienta, esta serie se centra en algunas funciones básicas, como crear un juego, una escena, un terreno, una pantalla de Heads Up (componentes de la interfaz de usuario), AIModel (modelo de comportamiento para un objeto), así como la codificación en el lenguaje de scripts Lua. Después de desarrollar el Simulador en el Editor ShiVa como una aplicación 3D, lo exportaremos para las plataformas iOS y Android. Para la plataforma Android, el archivo exportado desde ShiVa Editor se importará a ShiVa Authoring Tool. Luego, se convertirá en un archivo apk para implementarlo en un Motorola Droid con Android 2.2. Para las plataformas iPad y iPhone, el archivo exportado desde ShiVa Editor se importará a ShiVa Authoring Tool para convertirlo en proyectos de Xcode. Luego, uno puede construir los proyectos en Xcode e implementar los ejecutables resultantes en los dispositivos conectados.
En la parte 1 de esta serie, presentamos la aplicación Simulador de vuelo llamada Simulador y explicamos el proceso de desarrollo que seguimos al crear el Simulador. También describimos los contenidos del archivo de descarga que acompaña a esta serie. Finalmente, introducimos las maniobras de vuelo básicas simuladas en la aplicación..
En la parte 2, comenzamos a describir cómo desarrollar el juego utilizando el Editor ShiVa. Nuestro enfoque principal en la parte 2 es crear los componentes visuales de la aplicación..
En la parte 3, continuamos desarrollando el juego usando el Editor ShiVa. Principalmente, la parte 3 está involucrada con la codificación y la prueba unitaria de la aplicación..
En la parte 4, la última entrega de la serie, mostramos cómo exportar la aplicación desde el Editor ShiVa e importar en la Herramienta de creación ShiVa. Luego, explicamos cómo convertir la aplicación en un ejecutable específico de la plataforma a través de la herramienta de creación ShiVa. Las plataformas que consideraremos son Android, iPad y iPhone. Damos imágenes de pantalla del simulador desde dispositivos reales utilizados para las pruebas, un teléfono Motorola Droid con Android OS 2.2, un iPad 2 con iOS 4.3 y un iPod Touch con iOS 4.3. Finalmente, en 'Observaciones finales', presentamos una conclusión de la serie..
El simulador proporciona una vista de los alrededores desde la cabina como un piloto los vería. El plano en sí, cuya dinámica es simulada, nunca es visible. El usuario va a ver un terreno debajo y el cielo sobre el terreno. Hay cuatro maniobras simples para simular: la maniobra de cabeceo para subir o bajar y la maniobra de giro hacia la izquierda o la derecha. Las descripciones técnicas de esas maniobras se dan en la siguiente sección. Aquí, revisaremos las pantallas durante las maniobras y discutiremos cómo las maniobras son realizadas por el usuario.
Para jugar en el simulador, el dispositivo móvil debe sostenerse de lado y girarse 90 grados en sentido contrario a las agujas del reloj. En esa posición, hay cinco botones en la parte superior de la pantalla (ver más abajo):
Cada una de esas cuatro maniobras, una vez iniciadas, toma una cierta cantidad de tiempo para completarse. Una vez que comienza una maniobra, no se puede iniciar ninguna otra maniobra hasta que se complete la actual. En todo momento, el avión sigue moviéndose a velocidad constante. Cambia la altitud solo durante una maniobra de cabeceo y cambia de dirección solo durante una maniobra de giro.
Antes de que comience cualquier maniobra, el plano es paralelo a la superficie (terreno).
Durante un giro hacia la izquierda, la punta del ala izquierda del avión baja y la punta del ala derecha sube. Para simular este comportamiento, el horizonte comenzará a girar en sentido horario. El terreno se desplazará hacia la derecha, porque el avión gira a la izquierda y se mostrará un mensaje, 'Banca a la izquierda', como se muestra a continuación:
Una vez que el avión alcanza un ángulo máximo de balanceo (banco), el horizonte comenzará a girar en sentido contrario a las agujas del reloj y dejará de girar cuando el plano vuelva a ser paralelo a la superficie. Durante todo el ciclo de giro a la izquierda, el terreno seguirá desplazándose hacia la derecha para simular un giro a la izquierda del avión..
Un giro a la derecha es similar al de un giro a la izquierda: el horizonte comenzará a girar en sentido contrario a las agujas del reloj para simular el giro del avión, el terreno se moverá hacia la izquierda y se mostrará un mensaje, 'Banca a la derecha', como sigue:
Una vez que el avión alcanza un ángulo de balanceo mínimo, el horizonte comenzará a girar en el sentido de las agujas del reloj y dejará de girar cuando el plano vuelva a ser paralelo a la superficie. Durante todo el ciclo de giro a la derecha, el terreno seguirá moviéndose hacia la izquierda para simular un giro a la derecha del avión.
Durante una maniobra de lanzamiento para subir, el horizonte primero bajará para simular que la nariz del avión sube. Además, se mostrará un mensaje, 'Subiendo', de la siguiente manera:
Una vez que el avión alcanza un ángulo de inclinación máximo, la nariz del avión comienza a descender. Para simular este comportamiento, el horizonte comenzará a ascender hasta que el plano vuelva a ser paralelo a la superficie. A medida que el horizonte avanza, la altitud se mostrará junto al mensaje 'Subiendo' como se muestra a continuación:
La maniobra de lanzamiento para bajar es simétrica para subir. El horizonte comenzará a ascender para simular que la nariz del avión desciende y se mostrará un mensaje, 'Descendiendo', como se muestra a continuación:
Una vez que el plano alcance un ángulo de inclinación mínimo, el horizonte comenzará a descender hasta que el plano vuelva a ser paralelo a la superficie. A medida que el horizonte desciende, la altitud se mostrará junto al mensaje 'Bajando' como se muestra a continuación..
Durante todo el ciclo de una maniobra de cabeceo, el avión gana altitud, si sube, o pierde altitud, si baja.
Cuando el usuario reinicia el simulador, se mostrará en la pantalla un mensaje, 'Reinicio de simulación', durante unos segundos antes de que se reinicie la aplicación. Esto se muestra a continuación.
Además de los botones, el usuario puede iniciar las maniobras de giro y tono mediante una sola acción táctil en la pantalla.
Las maniobras de giro a través de las acciones del pulgar se muestran en la siguiente figura..
Las maniobras de cabeceo a través de las acciones del pulgar se muestran en la siguiente figura..
El usuario también puede reiniciar el simulador moviendo dos dedos en la pantalla simultáneamente en la misma dirección, ya sea hacia arriba o hacia abajo, como se indica a continuación.
El terreno tiene dimensiones finitas. Si el avión se sale de los límites, se muestra un mensaje 'Fuera de los límites', como se muestra a continuación, y la simulación se reinicia..
En esta sección, discutiremos conceptos básicos del desarrollo de juegos en 3D con ShiVa3D. La mayor parte de la discusión aquí está tomada de la documentación original de ShiVa3D. Para obtener más información, visite http://www.stonetrip.com/developer/doc/ y el manual del usuario que viene con el editor ShiVa.
Juego Representa un juego, la entidad principal de la aplicación. Encapsula todo lo demás en la aplicación, como cámaras, escenas, etc. El juego es una unidad de implementación independiente.
Escena representa un lugar o vista asociado con el juego. Hay un conjunto de objetos o modelos asociados con una escena. Un juego puede tener más de una escena. El juego en la aplicación Simulator tiene una sola escena..
Cámara Representa un punto de vista en el juego. El usuario verá el juego a través de la cámara. Una cámara puede moverse de una posición a otra o su dirección puede cambiarse. En esta serie, la cámara capturará el vuelo desde la vista de un piloto. Asumiremos que la cámara está colocada en frente del avión apuntando hacia adelante. El avión en sí no será visible..
Modelo puede ser un objeto o un conjunto de objetos con diversos atributos como forma, luz o sensor. El único modelo que tendremos en el simulador es un conjunto de luces predeterminado para iluminar el terreno.
Terreno Es el suelo en una escena. En el simulador, crearemos un terreno para simular lo que un piloto vería durante un vuelo.
Aimodel Implica 'inteligencia artificial' y representa comportamiento. Un AIModel puede tener funciones, manejadores, estados y variables. En el simulador, usaremos un AIModel para describir la dinámica simplificada de un plano.
Guión contiene el código en un AIModel, por ejemplo, el código para una función o controlador. El lenguaje de scripting en ShiVa3D es Lua (http://www.lua.org).
HUD significa Head Up Display y es un término que representa varios widgets de la interfaz de usuario, como el botón, la etiqueta, la lista, el control deslizante, etc., que permiten al usuario interactuar con el juego. Los componentes de HUD que vamos a utilizar en el simulador son las etiquetas de texto y los botones..
Para desarrollar el simulador utilizaremos la versión gratuita de ShiVa3D Suite (http://www.stonetrip.com/download.html), que incluye ShiVa Editor PLE (edición de aprendizaje personal) y ShiVa Authoring Tool. El diagrama a continuación ofrece una descripción general del proceso de desarrollo que usamos con esas herramientas.
Discutamos los pasos individuales de ese proceso..
El Editor ShiVa tiene varios módulos para desarrollar y probar una aplicación 3D, generalmente un juego, desde cero. Una característica importante del Editor ShiVa es que una aplicación desarrollada con esa herramienta se puede implementar (después de haber sido creada en ShiVa Authoring Tool) en diferentes dispositivos con diferentes sistemas operativos, por ejemplo. una PC con sistema operativo Windows, un teléfono móvil con sistema operativo Android o iPhone, etc. Algunas de las acciones básicas que puede realizar con el Editor ShiVa son las siguientes.
Desarrollar:
Prueba: puede realizar una prueba inicial de la aplicación 3D en el entorno de desarrollo antes de implementarla en un dispositivo de destino. Las pruebas se realizan a través de la función Animar o Vista previa de ShiVa Editor. Durante las pruebas, puede cambiar la configuración del tamaño de la pantalla para ver cómo se mostrará la aplicación en el dispositivo de destino real. Para probar los eventos de los botones, usamos clics del mouse. Para probar eventos táctiles, exportamos e implementamos la aplicación en un dispositivo real.
Exportar: después de completar la prueba, exporte la aplicación. Esto generará un archivo con extensión stk. La aplicación exportada será utilizada por la herramienta de creación ShiVa, que se describe a continuación..
El propósito principal de la herramienta de creación ShiVa es convertir una aplicación, creada a través del Editor ShiVa, en una aplicación específica de plataforma que se puede implementar en un dispositivo en particular (por ejemplo, iPhone, iPad o teléfono Android). Se aplican ciertas restricciones con respecto al sistema operativo de la máquina que ejecuta la herramienta de creación ShiVa y el dispositivo de destino para la conversión. Por ejemplo, la herramienta de creación de ShiVa que se ejecuta en una máquina con Windows no puede generar una aplicación de iPad o iPhone. Al desarrollar el simulador, usamos una máquina de Windows para el Editor ShiVa. Para crear la aplicación Simulador de Android, también usamos una máquina con Windows para ejecutar la Herramienta de creación ShiVa. Por otro lado, para crear las aplicaciones del simulador de iOS, para iPhone y iPad, utilizamos una máquina Mac OS para ejecutar la herramienta de creación de ShiVa..
Algunas de las acciones básicas que uno puede realizar con la herramienta de creación de ShiVa son las siguientes.
Seleccione la plataforma de creación: para los fines de esta serie, las tres opciones de plataforma que nos interesan son iPhone, iPad y Android. Tenga en cuenta que, para iPhone y iPad, debe tener la herramienta de creación de ShiVa ejecutándose en una máquina Mac OS.
Importar: Importe la aplicación (un archivo con extensión stk) que se exportó a través del Editor ShiVa.
Compilación: al crear para Android, configuraremos la Herramienta de creación de ShiVa para generar un archivo apk de Android que se pueda implementar directamente en un dispositivo compatible con Android. Al crear para el iPhone, configuraremos la Herramienta de creación de ShiVa para generar un proyecto Xcode para el desarrollo del iPhone. Luego, uno puede construir el proyecto en Xcode e implementarlo en un dispositivo conectado (en realidad usamos un dispositivo iPod touch para realizar pruebas en lugar de un iPhone). De manera similar, al crear para iPad, configuraremos la Herramienta de creación de ShiVa para generar un proyecto de Xcode para el desarrollo de iPad. Luego, uno puede construir el proyecto en Xcode e implementarlo en un iPad conectado.
Para cada plataforma, la herramienta de creación ShiVa ofrece opciones ligeramente diferentes para generar su producto final. Por ejemplo, cuando creas para Android, puedes generar un proyecto Eclipse en lugar de un ejecutable de Android (como se mencionó anteriormente, elegimos generar un ejecutable de Android en esta serie).
De manera similar, para iPhone o iPad, uno podría generar un ejecutable para su distribución en lugar de generar un proyecto Xcode (Como se mencionó anteriormente, elegimos generar proyectos Xcode en esta serie). Por favor, consulte el manual del usuario de ShiVa Authoring Tool para más detalles..
La siguiente es una lista de las configuraciones que utilizamos al desarrollar la aplicación Simulator para esta serie. Para requisitos adicionales y requisitos previos, consulte la documentación de Shiva3D que se describe en http://www.stonetrip.com/developer/doc/editor/information/hardware y http://www.stonetrip.com/developer/doc/authoringtool/installation.
Sistema operativo de la máquina de desarrollo: Windows XP
Tenga en cuenta que nuestro objetivo principal en esta serie es Android 2.2 para el cual se ha probado la aplicación. Sin embargo, Shiva 3D Authoring Tool versión 1.1 también es compatible con Android 2.3, nivel de API: 9 y Android 2.3.3, nivel de API: 10.
En esta sección, daremos una descripción de los archivos en el archivo comprimido que acompaña a este artículo..
Esta sección ofrecerá una descripción general de la dinámica de vuelo que se simulará en la aplicación..
La configuración general para el vuelo es un terreno cuadrado de 4,096 x 4,096 unidades de largo en cada lado (para una discusión sobre el término 'unidad', consulte la sección denominada 'Unidades y variables' en la parte 4 de esta serie). Las coordenadas tridimensionales están en el centro del terreno. A continuación se muestra una vista desde arriba del terreno. Tenga en cuenta que la flecha indica la sección positiva de un eje. Además, el punto dentro del círculo que representa el eje Y indica que la sección positiva del eje Y es opuesta, es decir, alejada del terreno. Desde la figura, observe que el eje Y es el eje vertical, mientras que los ejes X y Z son los ejes horizontales que representan el plano bidimensional en el que se encuentra el terreno..
Inicialmente, el plano que simulamos está en (x, y, z) = (0,50,2050) y su dirección de desplazamiento es recta.
Tenga en cuenta que la simulación no mostrará el plano. En su lugar, el usuario estará "sentado" en la cabina del piloto y verá los alrededores (terreno y cielo) desde la misma, como lo vería un piloto. La figura a continuación representa el entorno desde la perspectiva del piloto al comienzo de la simulación (en la simulación, el sistema de coordenadas no se muestra al usuario). Las elevaciones en el terreno cambian entre, aproximadamente, un máximo de 34 unidades y un mínimo de -34 unidades.
El simulador realizará cuatro maniobras simples: una maniobra de cabeceo para subir o bajar y una maniobra de giro hacia el lado izquierdo para ir hacia la izquierda o hacia la derecha.
Primero vamos a explicar la maniobra de tono. Como se muestra a continuación, el ángulo de inclinación es el ángulo de rotación alrededor del eje lateral que atraviesa el plano desde la punta del ala hasta la punta del ala (http://en.wikipedia.org/wiki/Aircraft_principal_axes).
La siguiente figura muestra la secuencia de la maniobra de cabeceo cuando el avión sube..
Inicialmente, el avión avanza en línea recta paralelo al suelo, que es una condición de estado estable. Cuando comienza el lanzamiento, la nariz del avión comienza a subir. Al mismo tiempo, el avión comienza a ganar altitud. En algún punto el ángulo de inclinación alcanza un máximo. Desde ese punto en la nariz del avión comienza a descender, sin embargo, el avión continúa ganando altitud. La nariz del avión sigue bajando hasta que el ángulo de inclinación alcanza 0, es decir, el plano alcanza nuevamente el estado estacionario. A partir de ese momento, el avión mantendrá su altitud. Como resultado de esta maniobra, el avión ha ganado altitud entre las dos condiciones de estado estable como se muestra a continuación.
La maniobra de cabeceo cuando el avión desciende es simétrica a la anterior. Inicialmente, el avión está viajando en línea recta. Cuando comienza el lanzamiento, la nariz del avión comienza a descender y el avión comienza a perder altitud. En algún punto el ángulo de inclinación alcanza un mínimo. Desde ese punto en la nariz del avión comienza a subir, sin embargo, el avión continúa perdiendo altitud. La nariz del avión sigue subiendo hasta que el ángulo de inclinación alcanza 0, es decir, el plano alcanza nuevamente el estado estacionario. A partir de ese momento, el avión mantendrá su altitud. Como resultado de esta maniobra, el avión ha perdido altitud entre las dos condiciones de estado estable.
Vamos a describir ahora el giro bancado. Como se muestra a continuación, el ángulo de balanceo (equivalente al banco) es el ángulo de rotación alrededor del eje longitudinal que pasa a través del plano desde la nariz hasta la cola. (http://en.wikipedia.org/wiki/Aircraft_principal_axes)
La siguiente figura muestra la secuencia de una maniobra de giro a la izquierda en banco.
Inicialmente, el avión está viajando en línea recta, lo que es una condición de estado estable. Cuando comienza la maniobra, el ángulo de inclinación comienza a aumentar y el avión comienza a girar a la izquierda. En algún punto el ángulo del banco alcanza un máximo. Desde ese punto en el banco, el ángulo comienza a disminuir, sin embargo, el avión continúa girando a la izquierda. El ángulo de inclinación sigue disminuyendo hasta alcanzar 0, es decir, vuelve a alcanzar el estado estable. A partir de ese momento, el avión seguirá recto. Como resultado de esta maniobra, el avión cambió de dirección a la izquierda entre las dos condiciones de estado estable, como se muestra a continuación..
El giro hacia la derecha hacia el banco es simétrico al anterior. Inicialmente, el avión está viajando en línea recta, lo que es una condición de estado estable. Cuando comienza la maniobra, el ángulo de inclinación comienza a disminuir y el avión comienza a girar hacia la derecha. En algún punto el ángulo del banco alcanza un mínimo. A partir de ese punto, el ángulo del banco comienza a aumentar, sin embargo, el avión continúa girando a la derecha. El ángulo de inclinación sigue aumentando hasta alcanzar 0, es decir, alcanzar nuevamente el estado estacionario. A partir de ese momento, el avión seguirá recto. Como resultado de esta maniobra, el avión ha cambiado de dirección a la derecha entre las dos condiciones de estado estable.
En realidad, los aviones podrían realizar maniobras más sofisticadas, como la banca y el lanzamiento al mismo tiempo. Para simplificar, nuestro avión realizará solo uno de esos en un momento dado. Agregar maniobras avanzadas al simulador no es una tarea difícil y se deja al lector interesado como un ejercicio.
Para simular el movimiento del plano en coordenadas tridimensionales, utilizamos un modelo simplificado como se describe a continuación.
Durante la maniobra de tono, a medida que el plano sube (abajo, respectivamente), el código de la aplicación incrementará (disminuirá, respectivamente) el valor de la coordenada Y en una cantidad fija en cada cuadro de la simulación independiente del ángulo del tono. La coordenada Y del plano está fija en todo momento, excepto durante una maniobra de inclinación..
Durante la maniobra de giro acumulado, a medida que un plano gira a la izquierda (derecha, respectivamente), el código de la aplicación incrementará (disminuirá, respectivamente) la rotación del plano alrededor del eje Y en una cantidad fija en cada cuadro de la simulación.
Luego, las coordenadas X y Z del plano se calculan en cada cuadro usando dos variables, V, velocidad del plano, y Yg, rotación del plano alrededor del eje Y, como se muestra a continuación:
Es fácil ver en la figura anterior que la velocidad del plano a lo largo de los ejes X y Z es -V * sin (Yg) y -V * cos (Yg), respectivamente. En cada marco de la simulación, el código de la aplicación obtiene Yg a través de una llamada a la API y calcula esas velocidades. Luego, obtiene las coordenadas X y Z actuales del plano y establece las nuevas coordenadas X y Z en función de las velocidades calculadas. La magnitud de la velocidad es constante a lo largo de la simulación..
En la parte 1 de esta serie, presentamos la aplicación Simulador de vuelo llamada Simulador y explicamos el proceso de desarrollo que seguimos al crear el Simulador. También describimos el contenido del archivo de descarga que acompaña a este artículo. Finalmente, introdujimos las maniobras de vuelo básicas simuladas en la aplicación. En la parte 2, comenzaremos a describir cómo desarrollar el juego utilizando el Editor ShiVa..