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?

  • Cámara en Android, cómo obtener el mejor tamaño, tamaño de vista previa, tamaño de imagen, tamaño de vista, imagen distorsionada
  • Acceso mediante programación al almacenamiento interno (no tarjeta SD) en Verizon HTC Droid Incredible (Android)
  • WebView en ScrollView: "Ver demasiado grande para encajar en la caché de dibujo" - ¿cómo volver a trabajar el diseño?
  • ¿Cómo puedo extraer la base de datos sqlite desde el dispositivo Android?
  • Operación del usuario está esperando "Building Workspace"
  • Android en las donaciones de aplicaciones
  • Configuración de la API de la cámara Android en ISO?
  • ¿Podemos utilizar el detector de escala de gestos para pinch zoom en Android?
  • ¿Cómo usar `adb` para instalar aplicaciones de desarrollo para un solo usuario?
  • Reproducir sonido de teclado suave por defecto cuando se pulsan los botones en android
  • Configurar el tamaño de la cámara - ¿Parámetros vs intención?
  • ¿Cómo leer el buffer de marco actual en android?
  • 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.