Red de conocimiento informático - Material del sitio web - Desarrollo de juegos móviles basados ​​en sistema android

Desarrollo de juegos móviles basados ​​en sistema android

Si estás interesado en desarrollar juegos para la plataforma Android, hay muchas cosas que necesitas saber. Si tienes experiencia en el desarrollo de juegos, la transferencia a plataformas móviles no te resultará especialmente difícil. Principalmente sólo necesitas aprender su arquitectura y API. Si eres nuevo en el desarrollo de juegos, he elaborado una lista de cosas que necesitas saber para comenzar. Este conocimiento se aplica a muchos tipos de juegos, incluidos los de acción, estrategia, simulación y rompecabezas. Android es un entorno basado en Java. Esta es una gran noticia para los principiantes, ya que Java es ampliamente considerado como un lenguaje más fácil para comenzar que C, que es la norma para el desarrollo móvil. Google también hace un gran trabajo al documentar la API y proporcionar código de muestra para su uso. Hay un ejemplo llamado APIDemos que muestra casi todas las funciones de la API. Si está familiarizado con Java y ha utilizado Eclipse, ejecutar su primera aplicación es bastante sencillo. Si nunca antes ha escrito código, tendrá mucho que aprender en el camino, pero no se desanime.

Obtener el SDK

El primer paso para un novato es obtener el SDK (Kit de desarrollo de software) de Android. El SDK contiene una biblioteca de clases principal, un simulador, algunas herramientas y código de muestra. Recomiendo encarecidamente utilizar Eclipse y el complemento AndroidEclipse. Si juegas con Android, EclipseIDE es muy útil para los desarrolladores de Java. Si es la primera vez que desarrolla un proyecto Java, es posible que desee descargar el JDK completo, que incluye herramientas para firmar e implementar su aplicación.

Aprenda la arquitectura de las aplicaciones

No se apresure al océano del desarrollo. Es importante comprender la arquitectura de las aplicaciones de Android. Si no lo aprendes, será difícil depurar el juego que diseñes sin conexión. Necesitará comprender las actividades, las intenciones y cómo se relacionan entre sí. Google proporciona mucha información arquitectónica útil. Lo realmente importante es comprender por qué tu juego necesita más de una actividad y qué implica diseñar un juego con una buena experiencia de usuario. Para comprender esto, primero debe comprender qué es el ciclo de vida de la Actividad.

Conozca el ciclo de vida de la Actividad

El ciclo de vida de la Actividad es administrado por el sistema operativo Android. La creación, reanudación, suspensión y destrucción de su actividad están controladas por el sistema operativo. Es importante manejar estos eventos correctamente para que la aplicación se comporte bien y haga lo que el usuario cree que es correcto. Es bueno saber cómo funciona todo esto antes de diseñar el juego, porque puedes ahorrarte tiempo de depuración y un costoso rediseño posterior. Para la mayoría de las aplicaciones, la configuración predeterminada funcionará bien, pero para los juegos, es posible que desees considerar activar la bandera. Cuando se establece de forma predeterminada, Android crea nuevas instancias de la actividad como mejor le parezca. Para los juegos, es posible que solo necesites una instancia de la actividad del juego. Esto tiene algunas implicaciones sobre cómo desea administrar el estado de una transacción, pero para mí esto resuelve algunos problemas de administración de recursos y debe considerarse.

Bucle principal

Dependiendo del tipo de juego que estés escribiendo, es posible que necesites o no un bucle principal. Si tu juego no depende del tiempo o si simplemente responde a lo que hace el usuario y no realiza ningún cambio visual, esperando eternamente la entrada del usuario, entonces no necesitas un bucle principal. Si estás escribiendo un juego de acción o un juego con animaciones, temporizadores o cualquier tipo de automatización, deberías considerar seriamente el uso de un bucle principal.

El bucle principal del juego ejecuta el subsistema de recordatorio en un orden específico, normalmente con tantos "tics" por segundo como sea posible. Tu bucle principal debe ejecutarse en su propio hilo. La razón es que Android tiene un hilo de interfaz de usuario principal. Si no ejecutas tu propio hilo, el juego bloqueará el hilo de la interfaz de usuario, lo que provocará que el sistema operativo Android se ejecute. fallan las tareas de actualización normales. El orden de ejecución suele ser el siguiente: estado, entrada, inteligencia artificial, física, animación, sonido, vídeo.

Actualizar estado significa gestionar las transiciones de estado, como el final de un juego, la selección de personaje o el siguiente nivel. Muchas veces es necesario esperar unos segundos en un estado determinado, y la administración del estado debe manejar este retraso y configurarlo en el siguiente estado una vez transcurrido el tiempo.

La entrada es cualquier tecla presionada por el usuario, movimiento de la barra de desplazamiento o toque por parte del usuario. Es importante manejar esto antes de manejar la física porque muchas veces la entrada afectará la capa de física, por lo que manejar la entrada primero hará que el juego responda mejor. En Android, los eventos de entrada provienen del hilo principal de la interfaz de usuario, por lo que debe escribir código para colocar la entrada en un búfer para que su bucle principal pueda recuperarla del búfer cuando sea necesario. Esto no es difícil. Primero defina un campo para la siguiente entrada del usuario y luego configure la función O para que se coloque en ese campo después de recibir una acción del usuario. Estos dos pasos son suficientes. Si se trata de una operación de entrada legal para un estado determinado del juego, entonces todas las actualizaciones que la entrada necesita realizar en ese momento ya están determinadas, y la física debe preocuparse por cómo responder a la entrada.

Lo que hace la IA es similar a que un usuario decida qué botón “presionar” a continuación. Aprender a escribir un programa de IA está más allá del alcance de este artículo, pero la idea general es que la IA presionará botones en respuesta a la intención del usuario. Estos también deben ser procesados ​​y respondidos por la física.

La física puede ser o no física real. Para los juegos de acción, el punto clave es tener en cuenta la hora de la última actualización, la hora actual de la actualización, la entrada del usuario y la inteligencia artificial, y decidir en qué dirección van y si entrarán en conflicto. Para un juego en el que visualmente tomas algunas partes y las deslizas, la física es la parte del juego que desliza las partes o las coloca en su lugar. Para un juego pequeño, la física es la parte del juego que determina si la respuesta es correcta o incorrecta. Podrías nombrarlo de otra manera, pero cada juego tiene una parte importante que es el motor del juego (Nota del traductor: puede significar la parte principal), y en este artículo, llamo a esta parte física.

La animación no es tan simple como poner imágenes gif en movimiento en el juego. Debes hacer que el juego dibuje cada cuadro en el momento adecuado. Esto no es tan difícil como parece. Mantenga algunos campos de estado como isDancing, danceFrame, etc. para que la actualización de la animación pueda determinar si puede cambiar al siguiente fotograma. Las actualizaciones de animación realmente no hacen mucho. Los cambios reales para mostrar la animación se manejan mediante actualizaciones de video.

Las actualizaciones de sonido manejan los sonidos de activación, detención de sonidos, cambios de volumen y cambios de tono. Normalmente, al escribir un juego, las actualizaciones de sonido generarán algunos flujos de bytes en el búfer de sonido, pero Android puede administrar sus propios sonidos, por lo que tu elección será utilizar SoundPool o MediaPlayer. Todos deben manejarse con cuidado para evitar errores, pero debe saber que, debido a algunos detalles de implementación de bajo nivel, los archivos de sonido pequeños y con una tasa de bits baja darán como resultado el mejor rendimiento y estabilidad.

Las actualizaciones de vídeo tienen en cuenta el estado del juego, las posiciones de los personajes, las puntuaciones, el estado, etc., y lo dibujan todo en la pantalla. Si utiliza el bucle principal, es posible que desee utilizar SurfaceView y realizar un dibujo "empuje". Para otras vistas, la vista misma puede llamar a la operación de dibujo y el bucle principal no tiene que ocuparse de ella. SurfaceView produce la mayor cantidad de fotogramas por segundo y es más adecuado para juegos con animaciones o partes móviles en la pantalla. Lo que debe hacer la actualización del video es obtener el estado del juego y dibujar una imagen para este estado en el tiempo. Otras operaciones automatizadas se manejan mejor mediante diferentes tareas de actualización.

¿3D o 2D?

Antes de empezar a escribir un juego, tienes que decidir si lo quieres hacer en 3D o en 2D. Los juegos 2D tienen una curva de aprendizaje mucho más baja y generalmente es más fácil lograr un buen rendimiento. Los juegos 3D requieren habilidades matemáticas más profundas y pueden causar problemas de rendimiento si no te importa. Si planeas dibujar formas más complejas que cuadros y círculos, también necesitarás poder utilizar herramientas de modelado como 3DStudio y Maya. Android admite OpenGL para programación 3D y hay muchos buenos tutoriales sobre OpenGL de los que aprender.

Cree métodos simples y de alta calidad

Al comenzar, asegúrese de que todo su juego no consista en un método grande y largo. Esto es bastante sencillo si sigues el patrón de bucle principal que describí anteriormente. Cada método que escriba debe realizar una tarea muy específica y debe hacerlo sin errores. Por ejemplo, si necesita barajar una baraja de cartas, debe escribir un método "", y ese método debería hacer precisamente eso.

Esta es una práctica de codificación que se aplica a cualquier desarrollo de software, pero es especialmente importante para el desarrollo de juegos. En un sistema con estado y en tiempo real, la depuración se vuelve muy difícil. Mantenga sus métodos lo más pequeños posible. Una regla general es que cada método tiene un solo propósito. Si desea dibujar un fondo para una escena mediante programación, es posible que necesite un método llamado "." Tareas como esta se pueden completar rápidamente, por lo que puedes desarrollar tu juego con un enfoque de bloques de construcción y puedes continuar agregando funciones que desees sin que todo sea difícil de entender.

¡Lo más importante es la eficiencia!

El rendimiento es el principal tema de cualquier juego. Nuestro objetivo es hacer que el juego reaccione lo más rápido posible y se vea lo más fluido posible. Algunos métodos como Canvas.drawLine son más lentos. Y dibujar fragmentos del tamaño de una pantalla en el lienzo principal es costoso en cada fotograma. La compensación es necesaria para lograr un rendimiento óptimo. Asegúrese de administrar bien sus recursos y utilizar técnicas para completar sus tareas con la cantidad mínima de recursos de CPU. Incluso los mejores juegos no funcionarán tan bien si el rendimiento no es excelente. La gente generalmente tiene poca tolerancia a los retrasos en los juegos o a los tiempos de respuesta lentos.

Consejos y trucos

Echa un vistazo al ejemplo de LunarLander en el SDK. Utiliza SurfaceView, que es apropiado para un juego que necesita procesar la mayor cantidad de fotogramas por segundo. Si desea hacer 3D, GLView en el ejemplo puede manejar una gran cantidad de trabajo de inicialización para visualización 3D. Para LightRacer, tuve que optimizar el método de dibujar todo; de lo contrario, la velocidad de fotogramas se reduciría significativamente. Solo dibujo el fondo en un mapa de bits una vez cuando se inicializa la vista. Los caminos se colocan en su propio mapa de bits, que se actualiza a medida que avanza el ciclista. Estos dos mapas de bits se dibujan en el lienzo principal de cada cuadro, con el controlador en la parte superior y una explosión al final. Esta tecnología permite que el juego se ejecute a un nivel jugable.

Si corresponde, también es una buena práctica hacer que su mapa de bits tenga el tamaño exacto al que desea dibujarlo en la pantalla. Después de hacer esto, deberá escalarlo para ahorrar recursos de la CPU.

Una configuración de mapa de bits que es consistente en todos los juegos (como RGBA8888). Esto ahorrará tiempo de CPU a la biblioteca de gráficos al reducir el tiempo dedicado a convertir entre diferentes formatos.

Si decides desarrollar juegos 3D pero no tienes conocimientos de 3D, necesitas leer uno o dos libros sobre programación de juegos 3D y aprender álgebra lineal. Al menos deberías entender los productos escalares, los productos cruzados, los vectores, los vectores unitarios, las normales, las matrices y las transformaciones. El mejor libro que he encontrado a este respecto se llama "Programación de juegos 3D y matemáticas de gráficos por computadora".

Los archivos de sonido deben ser pequeños y tener una tasa de bits baja. Cuanto menos hay para cargar, más rápido se carga y menos memoria requiere el juego.

Los archivos OGG se utilizan para sonidos y los archivos PNG se utilizan para imágenes.

Asegúrate de liberar todos los reproductores multimedia y liberar todos los recursos cuando se destruya la actividad. Esto asegura que el recolector de basura limpie todo y que no haya pérdidas de memoria entre los inicios del juego.

Únase al grupo de Google de Android para obtener asistencia de la comunidad. Hay personas aquí que pueden ayudarle durante el proceso de desarrollo.

Lo más importante es que te tomes el tiempo para probar y volver a probar para asegurarte de que cada pequeña pieza funcione como deseas. Mejorar el juego es la parte más difícil y que requiere más tiempo de todo el desarrollo. Si se apresura a lanzarlo al mercado, es probable que decepcione a los usuarios y sienta que sus esfuerzos fueron en vano. No puedes hacer que a todos les guste lo que escribes, pero al menos deberías intentar publicar un trabajo de la más alta calidad posible.