Quelle est la meilleure façon de créer des animations lors du développement Android?

10

J'essaie de créer mon premier jeu Android et j'essaie actuellement de trouver (avec quelqu'un qui fera les dessins et un autre programmeur) quelle est la meilleure façon de créer une animation. (Animations telles qu'un personnage en mouvement, etc.)

Au début, la créatrice a dit qu'elle pouvait dessiner des objets / personnages et les animer avec flash afin qu'elle n'ait pas à dessiner chaque image d'une action. L'autre programmeur et moi ne connaissons pas trop Flash, j'ai donc suggéré d'extraire toutes les images de l'animation Flash et de les faire apparaître l'une après l'autre au début de l'animation.

Il a dit que cela finirait par prendre trop de ressources sur le CPU et j'ai tendance à être d'accord, mais je ne vois pas vraiment comment nous sommes censés faire des animations fluides sans que cela soit trop dur sur le matériel et, si possible, pas le concepteur dessine chaque image sur Adobe Illustrator.

Un développeur de jeux Android expérimenté peut-il m'aider à équilibrer cela afin que nous puissions passer à d'autres parties du jeu car je n'ai aucune idée de la meilleure façon de créer des animations.

Adam Smith
la source

Réponses:

12

Si vous envisagez une animation 2D, le rendu d'un sprite puis d'un autre ne sera pas un problème pour l'appareil (sauf si vos sprites sont énormes).

Ci-dessous est un sprite d'animation typique qui est le premier que j'ai trouvé avec une petite recherche. Il s'agit d'une technique couramment utilisée et de nombreux sites Web proposent des feuilles de sprites gratuites (et sinon, vérifiez toujours la licence).

Source de l'image: [ici] (http://gaminggroundzero.com/?page_id=31)

Image + auteur source: ici

Le vert est défini comme la couleur transparente de l'image afin que vous n'ayez aucune zone de couleur indésirable. Vous aurez besoin de connaître les coordonnées de chaque animation dans la séquence d'animation dans la feuille de sprites pour pouvoir les lire.

Pour Android, nous pouvons jeter un œil à un moteur de jeu open source de Chris Pruett (anciennement de Google) appelé Replica Island . Le code source est disponible, et nous pouvons regarder ses SpriteAnimation.java et SpriteComponent.java .

A SpriteAnimationest simplement créé avec un nombre d'images et un ID unique et chaque acteur du jeu peut avoir plusieurs animations. Le SpriteAnimationpeut recevoir un certain nombre de AnimationFrames, chacun avec une durée en millisecondes. Cela signifie que différentes animations peuvent être échangées vers l'intérieur et vers l'extérieur selon que le personnage se déplace ou attaque etc. (voir dans AnimationComponent.playAnimation(int id)).

Chaque itération de la boucle de jeu, la AnimationFrame, getFrame(float time)est appelée, elle vérifie le temps écoulé depuis la dernière itération de la boucle principale et décide quelle image jouer ensuite, puis retourne l'image à envoyer au système de rendu. Cela lui permet de sauter des images d'animation si l'animation se déroule trop lentement.

J'espère que cet exemple fonctionne, et vous pouvez le voir utilisé dans le jeu réel sur l'Android Marketplace ici .

Martin Foot
la source
Merci beaucoup pour la réponse bien expliquée et détaillée! Je vais voir comment je peux l'adapter à mon jeu. C'est très utile!
Adam Smith
@AdamSmith: Utiliser des feuilles de sprites comme ça est le meilleur moyen pour les animations 2D. Peu importe si votre artiste crée les animations en flash ou dans un autre programme, tant qu'il peut exporter l'animation vers des images que vous pouvez ensuite emballer dans une feuille de sprite
bummzack
@bummzack C'est le genre de réponse que j'espérais, merci!
Adam Smith
@AdamSmith, il convient également de noter (pour éviter toute confusion) que Replica Island n'utilise pas réellement de feuilles de sprites, il utilise des fichiers uniques. Une discussion sur la raison pour laquelle les feuilles de sprites sont utiles peut être trouvée ici et (avec plus de détails) ici .
Martin Foot
@Martin Foot, Vous avez donné une très belle explication. Mais j'ai encore de la confusion, j'ai 10-15 type d'animation et j'ai des cadres de chacun d'eux avec la taille de 320x480 dont vous pouvez dire une animation en plein écran. Alors, que me suggérez-vous que je devrais obtenir pour SpriteSheet ou fichier source d'animation unique? Je ne sais pas trop quoi utiliser. Merci de bien vouloir me suggérer la meilleure façon .. Merci beaucoup ....
Scorpion