¿Cómo debo comenzar el desarrollo del juego en C ++ con Android NDK?

Acerca del motor de juego Unity: Sí, no está optimizado como otros motores de juegos, pero de nuevo depende y evoluciona continuamente y mejora y mejora, pero necesitas optimizar tus juegos para dispositivos Android porque hay toneladas de fabricantes de Android y varias GPU. Es necesario aplicar varias compresiones de textura . Culpar a la unidad o cualquier motor de juego por ese motivo no te ayudará. He estado usando unity durante 5 años, hemos desarrollado y portado varios juegos en unity para la versión de Android 2.1 a la última, están funcionando muy bien.

Inicio del desarrollo de juegos para Android C ++ Un libro para su referencia.

Sí, necesita aprender OpenGL Introducción a OpenGL para programadores de juegos

Si eres un programador de aplicaciones de Android que está pensando en ingresar al desarrollo de juegos, es probable que estés planeando escribir código en Java. Si eres un veterano de desarrollo de juegos que está pensando en traer juegos a Android, es probable que prefieras hacer todo en C ++.

El código nativo es el camino a seguir si su juego necesita ejecutarse lo más rápido posible. Acabamos de lanzar la cuarta revisión de nuestro Native Development Kit para Android, e incluye una serie de mejoras que son particularmente útiles para los desarrolladores de juegos. Con el NDK, puede compilar su código en una biblioteca compartida, envolverlo en un delgado shell de Java para administrar los eventos de entrada y ciclo de vida, y hacer todo el trabajo pesado en C ++ con las API regulares de OpenGL ES. A partir de la Revisión 4, también puede dibujar directamente en los búferes de píxeles de mapa de bits de Java a partir del código nativo, que debería ser más rápido que cargar mapas de bits, ya que GL texturiza cada cuadro para los juegos 2D que desean hacer su propia composición de escena. La revisión 4 también (¡finalmente!) Incluye soporte de gdb para depurar su código nativo en el dispositivo.

Debe saber que cuando usa el NDK, no tiene acceso a las API de Android Framework. No hay forma, por ejemplo, de reproducir audio desde C ++ (aunque anunciamos en Google I / O nuestra intención de admitir OpenSL ES en el futuro). Algunos desarrolladores usan la API AudioTrack para compartir un búfer directo con código nativo que mezcla y genera una transmisión PCM sobre la marcha, y muchos llaman desde C ++ a la interfaz de Java SoundPool. Solo tenga en cuenta que para este tipo de trabajo, se requiere un salto a través de JNI al código Java.


Revisa las siguientes estadísticas:

Esta imagen muestra el SDK más común instalado en los teléfonos y tabletas Android utilizados por los usuarios del AppKrain SDK a partir del 19 de enero de 2016.

Muestra claramente que su rango de dispositivos objetivo (dispositivos de gama baja suponiendo que los dispositivos de gama baja se ejecutan en versiones anteriores de Android) en el mundo es solo del 7% hasta la fecha. Por lo tanto, no veo su idea de cambiar de motores de juegos como Unity, Unreal y frameworks de juegos como Cocosx rentable de todos modos.

Las siguientes cosas que necesitará para comenzar son:

  • Fluido en C ++. La mayor parte del desarrollo de juegos (para PC y consolas de videojuegos) se realiza actualmente en C ++, por lo que será mejor que se sienta cómodo con el lenguaje. Conocer la sintaxis y compilar “Hola mundo” no es lo suficientemente bueno. Una clase en la universidad tampoco va a ser suficiente. Sugiero ir a los libros de inmediato.
  • Álgebra lineal 3D básica. Como programador de nivel básico, lo más probable es que al principio trabajes mucho en código de juego de alto nivel. Para hacer las cosas de manera efectiva, necesitará una buena comprensión de los fundamentos del álgebra lineal 3D.
  • Asegúrese de conocer sus productos de punto y cruz, cómo calcularlos, pero, lo más importante, qué representan y cuándo debe usarlos. Debería sentirse cómodo con los sistemas de coordenadas relativas y las matrices como transformadas (no me importa si conoce la fórmula para una matriz de rotación, solo que sepa cómo usarla).
  • Calcular si un objeto en el mundo está dentro de una cierta distancia del jugador, y dentro de un cierto ángulo de su dirección de puntería, debe estar cerca de la segunda naturaleza.
  • Revise sus libros de álgebra lineal de la universidad o busque en Google ” Matemáticas para programación de juegos en 3D y gráficos por computadora

¡Eso es! Eso es todo lo que realmente necesitas para comenzar. Si está leyendo esto en línea, supondré que también tiene una computadora buena y rápida, un módem y alguna forma de comunicación en línea. Espero que esta respuesta te ayude. Por supuesto, hay otro elemento que no he discutido, y es el talento. Tienes que ser un buen programador, con habilidades creativas para resolver problemas. Supongo que crees que tienes eso, porque de lo contrario aún no estarías leyendo.

# HBK Dice: “¡La mejor de las suertes y comienza a codificar la aventura hoy!

Puedes aprender C ++. Pero eso solo no te ayudará en el desarrollo del juego. Para desarrollar juegos, necesita más aprendizaje y experiencia, especialmente en programación de gráficos en C ++. Al hacer esto, podrá crear juegos 2D geniales por su cuenta. Pero, esto limitaría tu imaginación a crear juegos simples.
Para crear juegos más complejos, necesitarías la ayuda de un motor de juego; y los motores de juego tienen sus propias codificaciones. Es posible que un motor de juego funcione con C ++; pero el tipo de codificación sería muy diferente, con todas las nuevas bibliotecas y cosas de las que nunca habría oído hablar antes en C ++. Tomará un poco de tiempo dominarlos; pero una vez que lo hayas hecho, te ayudará a crear juegos de cualquier nivel, de cualquier dificultad.
Por lo tanto, te sugiero que descargues cualquier motor de juego que elijas y practiques el desarrollo del juego en él. Encontrará una lista de motores de juegos que funcionan como C ++ como su lenguaje principal.

de alguna manera siento que la unidad no es óptima para Android, la mayoría del juego desarrollado en la unidad no es compatible con dispositivos de gama baja.

Esto revela 2 cosas sobre ti:
– eres al menos un programador de nivel medio. Diría senior a experto, pero tal vez me equivoque.
– Tienes poca experiencia en marketing.

Siendo un buen desarrollador ya sabes “la optimización temprana es la raíz del mal”
Por favor, mire aquí: matheszabi / RendererModeComparison
Fabulosas conclusiones están ahí.

En el SDK he encontrado una manera de alcanzar el FPS máximo, pero con una pequeña modificación de código instantáneamente solo tengo la mitad.
Tengo una cartera privada, donde hice algo con NDK y OpenGL ES. (si recuerdo que fue 2.0)

He probado algunos juegos de Unity 3D en Android y desperdician mi batería. Mi teléfono está tan caliente que inmediatamente comenzará a quemarse, porque la codificación deficiente, la conversión de código deficiente a código ejecutable.

¡Recortar Unity y hacer todo a mano puede resultar en poder ejecutar 2-100 triángulos más con los mismos fps! Esta es la parte buena.

El problema está aquí: “no es compatible con dispositivos de gama baja”.
¡Te estás centrando en lo incorrecto!

– ¿Por qué te importa el dispositivo de gama baja?
– ¿Quieres crear un buen portafolio?
– ¿Quieres apuntar a todos los dispositivos?

-o quieres ganar dinero ?!

Si quieres ganar dinero:
– Entra en Android e iOS también.
– Admite los dispositivos de gama alta, no te preocupes por los de gama baja. Esos no pagarán lo suficiente por ti
– Acepte un trabajo miserable, pero sea más barato el desarrollo para tener ganancias.

Me gusta un juego
– estuvo en las mejores ventas durante un par de meses. Ahora es demandado, porque simplemente descompilaron una aplicación y cambiaron las imágenes … Me gusta el nuevo diseño, mucho más que el original.
– está escrito en cocos + lua vinculante, pero tiene un código horrible, incluso con los ojos cerrados deberías poder escribir mucho mejor. Android difiere de iOS, muchos bloqueos, muchas cuentas perdidas, etc.
– La psicología del juego es profesional. Marketing completo + psicología detrás. El juego tiene un poco de estrategia, entrena el cerebro, así que me gusta ese estilo. Los desarrolladores originales han copiado esta parte de Blizzard, y Blizzard también los ha demandado :))

Según tu pregunta, no tienes un plan de juego claro, solo “wana be game developer”

Me gustaría sugerir hacer esqueletos en SDK y NDK también. Sé que es doble esfuerzo ahora, pero aprendes y luego podrás cambiar si es necesario o tomar decisiones correctas. Vale la pena la inversión de tiempo inicial para esto.

También me gustaría sugerir comenzar a hacer juegos básicos en 2D: pacman, flappy bird, andgry birds, etc. Puede manejar esto con opengl ES 1.1 o 2.0 también, también debe hacerlo en ambos sentidos para ver la diferencia y el esfuerzo para crearla.

Solo después de este cambio a 3D.

Un juego complejo simplemente necesita mucha codificación y para eso se necesitan los motores del juego, incluso si están lejos de ser perfectos.

Con Unity obtendrías un juego en 1-2 meses, y crearlo todo por ti mismo quizás llevaría 8-10 meses, por supuesto, tienes valores diferentes en los puntos de referencia y si Unity cambia de opinión para cobrar 100 usd / h de tus jugadores, no se ven afectados y así sucesivamente.

He escrito una serie de motores de juegos multiplataforma, en su mayoría 2d, pero algunos con soporte 3D ligero (jerarquías de objetos, sombreadores, animación de vértices, sistemas de partículas y portales entre zonas, pero nada parecido a la complejidad de un motor de juego AAA moderno), así que creo que podría tener una perspectiva útil aquí.

Primero, a pesar de los apologistas, estoy de acuerdo con su valoración de que Unity3d no es el más optimizado para Android o iOS. Realmente no puede ser. Es un motor de juego completamente generalizado que trata de ser todo para todos.

Dicho esto, preguntas si necesitas saber OpenGLES.

Eso sería un gran sí. Al menos es tan importante saberlo como C ++. Probablemente más. Y tendrá que leer sobre cómo estructurar su OpenGL para optimizar el rendimiento del renderizado. Otros mencionaron la compresión de textura, que también puede ser importante.

No solo eso, sino que tendrás que aprender los lenguajes de sombreado de vértices y fragmentos. Y tendrá que aprender sobre hojas de sprites, coordenadas UV, amortiguadores Z, animaciones esqueléticas, cálculos de iluminación … La lista continúa.

Un experto puede escribir un motor de juego personalizado optimizado para un juego en particular, y funcionará mejor que Unity3d. La triste verdad es que su primer intento en un motor de juego probablemente no tendrá las optimizaciones básicas que harán que incluso coincida con el rendimiento de Unity, y mucho menos con el UE4. Es un tema de investigación completo que las personas pasan años dominando.

Puedes aprender mucho escribiendo un motor de juego. Puede valer la pena entender por qué las personas usan los que están listos (y por qué parecen tan complicados). Ciertamente me ayuda a entenderlos cuando los uso.

Si todavía quieres escribir uno, te recomiendo tomar SDL y comenzar allí. No es un motor, pero manejará los molestos bits de bajo nivel de poner en marcha un contexto OpenGL en Android e iOS, multiplataforma. Desde allí puedes escribir tu motor.

Pero personalmente he terminado de escribir motores de juegos completamente desde cero. Me gusta el código fuente, así que no me gusta usar Unity. Pero si estuviera desarrollando un complejo juego en 3D, probablemente usaría Unreal. Tal como está, estoy trabajando en un juego que no necesita pasar de 2d, y estoy usando Cocos2d-x. Pero esa es otra historia.

Esta suerte

Mi sugerencia

Use Unity3D y C #, no use el NDK

Unity3D tiene ILL2Cpp que básicamente convierte su código C # a C ++, obtiene el rendimiento de C ++ y Unity funciona en iOS y todas las plataformas.

Echa un vistazo a cocos2d-x. Es perfecto para ti. Utiliza android ndk y está basado en c ++.