Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Juego de Android, lienzo o opengl?

Estoy escribiendo un juego para android, tengo que elegir entre lienzo o opengl para dibujar. He leído que el lienzo no tiene un buen framerate, pero lo que es bueno? Imagínate que ibas a escribir un juego de aves enojado, ¿sería bastante suficiente?

  • Acaba de subir la aplicación para Android: ¿Cuánto tiempo tarda en aparecer la aplicación en la búsqueda de Android Market?
  • Obtener hilo por nombre
  • Dependencias proporcionadas sólo pueden ser frascos
  • Cómo obtener el origen de ImageView para cambiarlo?
  • Desarrollo en un dispositivo basado en Android vía inalámbrica
  • ¿Está GCM (ahora FCM) libre para cualquier límite?
  • Android: ¿Es posible escalar un xml dibujable?
  • Punto flotante con 2 dígitos después del punto
  • ¿Cómo mostrar la barra de progreso Indeterminada cuando se pulsa el botón Actualizar en ActionBarSherlock?
  • Envío de datos a la actividad principal de android
  • Android 4.2 rompió mi código de cifrado / descifrado y las soluciones proporcionadas no funcionan
  • BroadcastReceiver + SMS_RECEIVED
  • 3 Solutions collect form web for “Juego de Android, lienzo o opengl?”

    Inicialmente escribí mi juego usando Canvas pero luego necesitaba cambiar a OpenGL por las siguientes razones:

    • Usando Canvas, tus sprites se almacenan en el montón (a menos que específicamente se almacenen en caché en el disco) esto pone un límite en el tamaño total de los recursos de sprite dependiendo del teléfono – ¡no es bueno! Encontré esto era alrededor de 42mb en mi teléfono – note esto es el tamaño sin comprimir de mapas de bits. Si usted tiene varios tipos de entidad, cada uno con animaciones diferentes, entonces puede llegar a este tamaño muy rápidamente.

    • OpenGL almacena los recursos de sprite por separado en el montón, lo que aumenta considerablemente la memoria disponible.

    • La lona no escala muy bien. Cuantas más llamadas .draw (…) realice, más lento se ejecutará. La relación es bastante lineal.

    • Utilizando OpenGL puede combinar sus llamadas de drenaje para mejorar el rendimiento.

    Puede ser intimidante a partir de OpenGL lo que hace que Canvas parezca atractiva. Sin embargo, de la experiencia que desearía que acababa de comenzar con OpenGL. Mi recomendación sería "morder la bala" e ir con OpenGL si usted está haciendo un juego.

    Para hacer las cosas un poco más fáciles para empezar, he escrito algunas clases útiles de utilidad que hacen todo el OpenGL gritty nitty para usted. Te permiten hacer simples llamadas .draw (..) similares a cuando se usa Canvas. El siguiente tutorial de video debería empezar:

    http://www.youtube.com/watch?v=xc93rN2CGNw

    EDIT: 03/04/13

    Parece que a medida que aparezcan nuevos dispositivos Android y sistemas operativos, Google ha aumentado el rendimiento de Canvas. Un usuario de la clase de utilidad que describí anteriormente me respondió con el siguiente correo electrónico después de hacer un benchmarking:

    Dibujo de 500 sprites en posiciones aleatorias a través de la lona de cada marco.

    Estos son los resultados: Huawei Honor (Gingerbread, single core 1.4 Ghz): SpriteBatcher: 19-20 FPS, Lienzo: 23-24 FPS

    Nexus 7 (JellyBean, 4 núcleos 1,3 Ghz): SpriteBatcher: 29-30 FPS, lienzo: 57-58 FPS

    Ahora, en mi respuesta a este usuario le expliqué que esto podría estar relacionado con ineficiencias en la forma en que he escrito la clase de utilidad SpriteBatcher. Sin embargo, de mi propia experiencia con la lona de nuevo en un HTC Desire corriendo Froyo 2,2 puedo decir que fue definitivamente más lento sprite para sprite!

    En sistemas operativos posteriores y dispositivos puede haber superado la eficiencia, pero algunos de los puntos de mi respuesta original siguen siendo válidos. Por ejemplo, conseguir alrededor de golpear una excepción OutOfMemoryException sin tener que recurrir a las texturas de almacenamiento en caché en el disco, etc

    Si aprendo más, continuaré actualizando esta respuesta.

    Todo depende del tipo de juego que necesites implementar.

    Teniendo en cuenta que usted está pidiendo una implementación de lienzo, supongo que se está refiriendo a un puro juego de 2D sprites.

    Si los sprites no son muchos y el número es muy bajo, la verdad es que potencialmente quieres notar una gran diferencia (considere que muchos juegos con gráficos básicos 2D utilizan lienzo).

    Si el rendimiento es importante o tiene un número muy alto de sprites, entonces vale la pena implementar un sistema basado en OpenGL.

    Considere que el uso de OpenGL se beneficiará de la GPU hardware dedicado para que su CPU será descargado de la carga de la prestación de gráficos.

    Por otra parte, se beneficiará de mucha más flexibilidad que una aplicación de lienzo utilizando mezcla, iluminación, post efectos de procesamiento. Realmente no hay límites en lo que puedes hacer.

    Un ejemplo simple es la rotación y escalado que el uso de un motor 3D como OpenGL es muy barato y ofrece excelentes resultados.

    La lona debe ser adoptada realmente para las implementaciones simples.

    PS si usted va para OpenGL ES 2.0 y pipeline programable, usted tiene realmente ningún límite en lo que usted consigue (que brilla intensamente, borrosa y millares opciones diferentes). El límite es realmente nuestra fantasía en ese caso.

    🙂

    Si vas a hacer un gran juego que definitivamente debe considerar el uso de AndEngine: http://www.andengine.org/

    Si se usa correctamente, es una gran ayuda. Lamentablemente no hay documentación en el código. Pero el foro en el sitio está bastante bien. E incluso aquí en SO más y más preguntas sobre AndEngine aparecen. Por suerte hay un montón de buenos ejemplos para empezar.

    AndEngine utiliza OpenGL – por lo que no tienes que desordenar con framerates posiblemente bajo mientras dibuja en el lienzo.

    Echa un vistazo a los ejemplos de la aplicación: https://market.android.com/details?id=org.anddev.andengine.examples

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.