déc
28
2010

[Tutoriel AndEngine] Partie 4 – Les sprites animés

Comme nous l’avions vu dans la partie 2 de la suite des tutoriaux sur AndEngine Partie 2, un sprite permet d’afficher une image dans notre scène, mais il existe un autre type, celui-ci est appelé AnimatedSprite dans la librairie AndEngine.

Utiliser un sprite animé est relativement facile grâce à cette classe du moteur, on se base toujours sur une texture.

Commençons par déclarer notre texture comme ceci :

private BitmapTextureAtlas textureSoldier;

Puis dans notre méthode OnLoadResources :

textureSoldier = new BitmapTextureAtlas(512, 64);

Voilà nous avons notre support pour stocker notre texture, passons maintenant à la partie la plus importante ! La déclaration de notre sprite animé.

Tout d’abord un sprite animé doit utilisé la classe TiledTextureRegion pour stocker ses données.

private TiledTextureRegion soldier;

Puis dans la méthode OnLoadResources() nous allons utiliser le TextureRegionFactory et sa méthode createTiledFromAsset


TiledTextureRegion BitmapTextureAtlasTextureRegionFactory.createTiledFromAsset(Texture pTexture, Context pContext, String pAssetPath, int pTexturePositionX, int pTexturePositionY, int pTileColumns, int pTileRows)

Paramètres :

  • Texture : La texture où l’on va stocker notre image
  • Context : Le contexte de l’application
  • AssetPath : Le nom de notre image
  • TexturePositionX : La position de départ de notre texture en X
  • TexturePositionY : La position de départ de notre texture en Y
  • TileColumns : Nombre de colonne pour l’animation
  • TileRows : Nombre de ligne pour l’animation
soldier = BitmapTextureAtlasTextureRegionFactory.createTiledFromAsset(textureSoldier, this, "gfx/soldier.png", 0, 0, 8, 1);

N’oubliez pas de charger le texture dans le moteur

getEngine().getTextureManager().loadTextures(textureSoldier);

Pour finir nous allons nous diriger vers la méthode onLoadScene() et ajouter notre petit soldat !

Utilisons dés maintenant notre classe AnimatedSprite comme ceci :

final AnimatedSprite animatedSprite = new AnimatedSprite(50, 100, soldier);

Paramètres de la classe AnimatedSprite :

  • PositionX : Position en X sur l’écran
  • PositionY : Position en Y sur l’écran
  • TiledTextureRegion : la texture animée

Puis nous allons animer tout ceci grâce à la méthode animate de la classe AnimatedSprite

animatedSprite.animate(25, true);

Paramètres :

  • Vitesse : Vitesse entre chaque image
  • Loop : Savoir si l’animation fonctionne en boucle ou non

Et pour terminer tout cela nous rajoutons notre sprite animé à notre scène

scene.attachChild(animatedSprite);

On lance tout cela et on voit que notre personnage bouge sur l’écran ! Si ça c’est pas magnifique :mrgreen:

AnimatedSprite

Lien vers les sources : Sources de la formation

  • http://SiteWeb Athanagor

    Merci beaucoup pour la qualité de tes tutoriels.

    J’essaie de faire un petit jeu de Puissance4 pour apprendre Android. Sais-tu comment faire pour que le sprite passe au-dessus de certaines parties de l’image et en-dessous d’autres éléments de décor ?
    Une bibliothèque Andengine est-elle utile pour gérer l’animation des pions d’un jeu de ce type ou est-ce que les fonctions 2D de base du SDK sont-elles largement suffisante ?

  • http://www.ace-art.fr/wordpress/ Pierre-Emmanuel Mercier

    Bonjour Athanagor,

    SDK Android (Hors opengl), oui tu peux l’utiliser mais l’avantage d’andengine est qu’il est basé sur opengl qui permet de travailler uniquement sur le context graphique et ainsi de gagner en performances (batterie aussi). Et c’est une bibliothèque pour faire des jeux, autant s’en servir :)

    Pour les éléments du décors, la classe Scéne prend en paramètre à la création un layercount, c’est le nombre de calque, si tu places tes éléments dans le bon calque alors ils seront superposés dessus ou dessous.

    Pour gérer l’animation c’est assez simple avec andengine comme je te l’ai montré dans le tutoriel, en quelques secondes tu auras quelques choses de propre et rapide.

    Bonne chance à toi pour ton puissance 4.

    En espérant avoir répondu à toutes tes questions

  • http://SiteWeb Athanagor

    Bonjour,

    Pour poursuivre sur l’idée de mon petit jeu de Puissance4, je me demandais s’il est possible de mixer l’affichage du rendu du moteur et l’affichage standard Android (les boutons en fait). J’ai essayé de modifiant la taille de la caméra mais rien n’y fait. La méthode OnCreate de la classe parent Activity ne semble plus du tout active.
    J’ai l’impression que le seul moyen de récupérer des boutons soit de les simuler avec des sprites…

    Bonne année et bonne santé pour toi et ta famille.

  • http://www.ace-art.fr/wordpress/ Pierre-Emmanuel Mercier

    Bonjour Athanagor,

    C’est normal on se trouve dans le contexte Opengl où la GUI Android n’a aucun effet, tu pourrais faire ça en mettant encapsulant AndEngine dans une view puis en rajoutant la view dans une activité. Mais le plus simple reste de faire des boutons en sprite histoire de ne travailler qu’avec le contexte OpenGL.

    Bonne année à toi aussi et plein de bonheur (tout ça tout ça) ^^

  • http://SiteWeb Athanagor

    Bonjour,

    J’ai encore une question stupide à te poser. Dans ton tuto n°2, tu dis que les textures doivent être des multiples de 2. Si je veux que mon plateau de jeu (grille à trous de 7*6) tienne toute la largeur de l’écran quelque soit la résolution de l’écran, quelle méthode dois-je utiliser pour dimensionner ma texture ?
    Dois-je faire une texture qui contient tout le plateau de jeu, ou un carré contenant juste la bordure autour d’un trou et dupliquer cette texture ?
    Quelle dimension privilégiée pour la texture sachant que la largeur d’écran la plus courante est 480 ?
    Toutes ces méthodes sont bêtes. :sad:

    Merci encore de ton aide.

  • http://www.ace-art.fr/wordpress/ Pierre-Emmanuel Mercier

    Salut Athanagor,

    Alors c’est les Textures (classe Texture) qui doivent être un multiple de 2 (32,64,128,…), après t’as texture graphique provenant de ton logiciel de dessin peu faire n’importe quelle taille, après il suffit de mettre la bonne taille à la texture pour qu’elle puisse contenir ton dessin.

    Après pour ton plateau tu as deux choix soit tu dessines case / case soit tu dessines toute la grille avec un logiciel photo.

    Je ne connais pas trop l’impact sur les performances des deux, il faudrait faire un test pour chacune des deux méthodes et voir quelle est la plus couteuse en mémoire et temps de calcul.

  • http://SiteWeb laHONTEdelinformatique

    Salut, c’est encore moi (J’ai changé mon pseudo…).

    En fait, je voudrais que ma texture tienne toute la largeur de l’écran quelque soit l’écran. J’ai fait différents essais qui sont tous des échecs à partir d’une image de 256*256 :
    - Résolution Engine(portrait) & Caméra = 480*800, mode plein écran
    * En la mettant dans une texture de 256*256, elle s’affiche sur la moitié de la largeur de l’écran (256/480) cadré à gauche. Cela me parait normal.
    * En la mettant dans une texture de 512*512 avec option BILINEAR_PREMULTIPLYALPHA, idem !
    - En changeant la résolution Engine et Caméra en 256*800, mode plein écran
    * En la mettant dans une texture de 256*256, elle s’affiche centrée sur la largeur !

    Je ne comprends pas du tout la logique d’affichage des ihm !http://www.ace-art.fr/wordpress/wp-content/plugins/smilies-themer/Nomicons%20v2.0/cwy.png

  • http://www.mickael-grail.com Mickaël

    Salut,

    Ton blog est très bien fait, il nous a beaucoup aidé pour commencer notre appli Android (un jeu).
    Cependant, j’aimerais savoir s’il existe une documentation technique de l’API avec le détail des fonctions ?

    Merci, Mickaël.

  • http://www.ace-art.fr/wordpress/ Pierre-Emmanuel Mercier

    A part extraire la javadoc, non il n’y en a pas, désolé

  • http://SiteWeb pascal

    merci pour ces tutos extra,
    je débute dans la prog android trés tardivement et je m’acccroche à tes premiers tutos
    je reconnais ramer pas mal
    sais tu s’il me serait possible de rencontrer un mec comme toi sur
    bordeaux pour prendre des cours et progresser bien plus vite
    contre rémunération en espèces ou services bien sur
    merci de toute façon
    pascal
    passionné ,frustré de ne pas avoir assez de tps et admiratif….

  • http://www.ace-art.fr/wordpress/ Pierre-Emmanuel Mercier

    Bonjour Pascal,

    Ca dépend de ce que tu cherches comme cours surtout :)

    Contact moi par mail, je pourrais peut être t’aider.

  • Letroll

    merci pour le tuto, Andengine est puissant, mais pas très ludique de par son manque de documentation, heureusement qu’il y en a qui partage leur savoir :-) 

  • http://www.ace-art.fr/wordpress/ Pierre-Emmanuel Mercier

    Je te remercie :)

  • Letroll

    est-il possible d’utiliser les AnimatedSprite avec une image de ce genre?