2011-10-01 15 views
10

He estado trabajando en un entorno de tiempo de ejecución de motor de juego en C++ para mis futuros juegos, y he comenzado a considerar a Android como una plataforma. Me di cuenta de que estaba estrechamente vinculado a Java y usa VM de Java en gran medida.Programación para Android en un entorno 100% C++?

¿Pero es posible mantener un entorno de tiempo de ejecución de C++ completo en Android NDK? No tengo nada en contra de Java y estoy preparado para usarlo si tengo que hacerlo, pero el rendimiento es una de mis principales preocupaciones (pretendo que mis juegos sean intensivos en recursos), especialmente en los teléfonos.

Y si es posible un entorno completo de C++, ¿cómo exactamente lo implementaría en Eclipse Indigo CDT? ¿Sería capaz de crear un ejecutable de juego compilado para Android antes de tiempo para obtener el máximo rendimiento? ¿Y habría complementos adicionales que necesitaría instalar en Eclipse? ¿Podría usar MinGW para compilar mis juegos, o necesitaría usar un compilador diferente? Si tuviera que usar Java de una forma u otra, ¿sería necesaria la compilación del código C++? Estas son todas las preguntas que me gustaría responder para obtener un entorno de desarrollo robusto en el Eclipse IDE.

Por favor, sepan que todavía soy bastante nuevo en el desarrollo de Android y en la programación multiplataforma en general. Mi objetivo es crear un motor de juego que aproveche al máximo el nuevo hardware, ¡especialmente en los teléfonos!

¡Gracias por cualquier consejo que puedan darme!

+1

Android tiene un compilador JIT Java especial y una gran parte del entorno Android está en Java. No hay realmente una razón para preferir C++ a Java para la velocidad en Android, gran parte del impacto en el rendimiento tradicional no está ahí. – dtech

+0

Muy bien, esa es una gran cosa que me preguntaba, gracias. De hecho, acabo de encontrar la clase NativeActivity (http://developer.android.com/reference/android/app/NativeActivity.html), que parece realmente prometedora, especialmente porque parece que apuntan a los juegos de C++. ¿Todavía necesitaría el SDK de Android y el compilador JIT para que esto funcione? – AutoBotAM

+0

El JIT es parte de Dalvik (VM de Android) y Dalvik está presente en todos los procesos del sistema, tanto si usa NativeActivity como si no, se usa para comunicarse con el resto del sistema. – adamp

Respuesta

9

NativeActivity, agregado en Android 2.3 (API 9) puede ser lo que estás buscando en términos de escribir juegos de Android usando solo C++. http://developer.android.com/reference/android/app/NativeActivity.html

Sin embargo, como dice que es nuevo en esto, es posible que desee comenzar con uno de los motores de juegos de Android actualmente disponibles en lugar de escribir el suyo de inmediato. Los dispositivos móviles tienen un conjunto muy diferente de restricciones que otras plataformas. Un teléfono no es muy útil si la batería se agota a media tarde, por lo que comenzar un proyecto con el objetivo declarado de ser "intensivo en recursos" ya está teniendo un mal comienzo. Pocas personas querrán jugar sus juegos durante 20 minutos aquí y allá si eso significa que no podrán hacer una llamada telefónica por la noche.

Si lo que quieres decir es que estás filmando para gráficos de alta gama, ten en cuenta que los dispositivos tienen una amplia gama de capacidades en esta área y que solo se dirigen a los límites más altos de tu audiencia. Las diferentes GPU tienen estrategias y características de rendimiento muy diferentes y todas tienen casos en los que brillan o se retrasan. Los juegos móviles más exitosos no son aquellos con los policontos más altos o los sombreadores de iluminación más complejos, son los juegos que logran una tasa de fotogramas uniformemente suave y tienen un estilo distintivo.

Echa un vistazo a algunos de los motores de juegos existentes para Android y pruébalos. Escribe un par de pequeños juegos para llevarlos a dar una vuelta de prueba y ver dónde están y qué no encajan con lo que intentas hacer. Si te sientes limitado con lo que está disponible, toma lo que has aprendido e intenta escribir tu propio motor que se adapte a los tipos de juegos que quieres hacer.

Aquí hay algunos enlaces para comenzar. Estos motores alimentan algunos juegos muy populares en Android Market y muchos desarrolladores los han encontrado útiles:

http://www.andengine.org/ andengine está escrito en Java y es de código abierto.

http://unity3d.com/ Unity se basa en C# y Mono.

http://www.madewithmarmalade.com/ Marmalade, anteriormente Airplay SDK se basa en C++.

+0

Esta es una muy buena respuesta. Y tienes razón, apunto a gráficos de alta gama. Supongo que quise decir que quería aprovechar los recursos tanto como sea posible sin paralizar la vida útil de la batería/velocidad de cuadro, y espero que mis juegos puedan adaptarse a las capacidades gráficas del teléfono (lo que significa ajustar el conteo de polígonos, la calidad del sombreador , y etc).He estado estudiando arquitectura de motores de juegos recientemente, pero tienes razón en que debería usar y analizar los motores existentes antes de decidir cómo voy a hacer mi entorno de ejecución final. ¡Muchas gracias, adamp! – AutoBotAM

2

La respuesta que desea prestar mucha atención es @ adamp. Ignora su respuesta bajo tu propio riesgo.

Para hacer frente a un par de otros puntos en su pregunta, sin embargo:

iba a ser capaz de crear un juego ejecutable compilado para Android antes de tiempo para el máximo rendimiento?

No, en la medida en que Android no utiliza "ejecutables de juegos compilados". Su código C/C++ se compilará en un archivo de objetos compartidos de Linux (.so) y se empaqueta con otras cosas (como su manifiesto) en un archivo APK. Sin embargo, compilar el .so será anticipado.

¿Podría usar MinGW para compilar mis juegos si tuviera que usar un compilador diferente?

Tengo la clara impresión de que va a sacar los ojos tratando de hacer un desarrollo NDK en Cygwin en Windows. Lo animo sinceramente a que haga su desarrollo de NDK en OS X o Linux. Al menos configure un VirtualBox con Ubuntu o algo para hacer sus compilaciones NDK.

Independientemente, el NDK viene con su propio compilador GCC. AFAIK, MinGW no es un compilador cruzado, y la mayoría de los dispositivos Android no se ejecutan en CPU x86.

Si tuviera que usar Java de una manera u otra, ¿sería necesaria incluso la compilación del código C++?

Sí. Ahora, para Honeycomb, tiene la opción de usar Renderscript para el trabajo OpenGL, eso equivale a un entorno C99 cuyo código no necesitará compilar con el NDK.

+0

Bien, voy a configurar VirtualBox con Ubuntu en algún momento si es necesario. Ojalá tuviera una buena máquina de desarrollo OS X por debajo de $ 600, ya que realmente también quiero desarrollar en iOS. Supongo que puede esperar por ahora. – AutoBotAM

0

He intentado un montón de ellos, y uno de los mejores que encontré que se compila de forma instantánea en un montón de otros dispositivos y le permite programar sus golosinas en combinación HTML5/C++ (sweeeeet) es MoSync (http://www.mosync.com/) y otro poco conocido que es un poco más amigable con la configuración es MotoDev de Motorola (http://developer.motorola.com/tools/motodevstudio/?utm_campaign=mhp01092012&utm_source=mhp&utm_medium=mws)

Me he dado cuenta de que hay algunas imágenes de máquina virtual y tutoriales que puede utilizar para evitar la configuración de problemas.

Cuestiones relacionadas