web-dev-qa-db-fra.com

Android: 2D. OpenGl ou Android.graphics?

Je travaille avec mon ami sur notre premier jeu Android. L'idée de base est que chaque image du jeu, toute la surface est redessinée (1 grande image bitmap) en 2 étapes:

  1. Un arrière-plan avec une image statique (PNG) efface le cadre précédent
  2. Ensuite, il est saupoudré partout avec un grand nombre de particules qui produisent un effet de bulles savonneuses où il y a un pool d'environ 20 bitmaps qui est choisi au hasard pour produire l'illusion que toutes les bulles (entre 200 et 300) sont toutes différentes. Les positions des bulles sont mises à jour sur chaque image (~ 50 ms) produisant un effet de bulles en mouvement.

Le moteur mathématique est en C (JNI) et actuellement tout le dessin est fait en utilisant le package Android.graphics très similaire (puisque c'était l'exemple que j'utilisais) à Lunar Lander. Cela fonctionne mais l'animation est quelque peu saccadée et je peux sentir par la température de mon téléphone qu'il est très occupé. Aurons-nous avantage à passer à OpenGL? Et comme question supplémentaire: quelle serait une bonne façon d'optimiser le mécanisme de dessin (comme Lunar Lander) que nous avons maintenant?

29
Bostone

Maintenant que j'ai commencé à travailler avec OpenGL ES, je l'utiliserais également pour les graphiques 2D. Cette manière est la plus flexible et extrêmement rapide (regardez cet exemple de code . Il s'agit du rendu 2D, et là vous pouvez voir la puissance d'OpenGL.

Ce n'est pas la chose la plus simple pour commencer, mais il existe de bons tutoriels - par exemple, this est un très bon.

6
Simon Heinen

Ne redessinez pas tout l'écran à chaque fois. C'est ce qui cause votre faible framerate. Utilisez la méthode invalidate pour marquer les zones qui ont changé chaque cadre.

3
Tyler Mercer