Bonjour à tous,

Je développe actuellement un jeu à 2 ou 4 joueurs où chaque joueur peut poser une série de pions sur un plateau tout en ayant la possibilité de
prendre des pions déjà sur le plateau.
Chaque joueur est représenté par un AsyncTask où j'implèmente naturellement le :
- onPreExecute()
- doInBackground (appel du moteur de calcul)
- onPostExecute() où le coup du joueur courant est affiché sur le plateau (appel d'une methode display()) et qui instancie un nouvel AsyncTask pour le joueur suivant.
Tout cela marche parfaitement depuis quelques mois.

Maintenant, j'essaie d'appliquer une animation de translation à chaque pion pour que visuellement on ait le temps de voir ce qui se passe.
Et là, ça ne va plus du tout :
- Dans le postExecute, j'instancie un TranslateAnimation pour le mouvement d'UN pion (un joueur pouvant déplacer N pions, il y a donc N TranslateAnimation)
- J'associe au translateAnimattion un AnimationListener en implémentant le onAnimationStart et le onAnimationEnd (celui-ci check s'il y a encore
des pions à animer pour ce joueur, auquelle cas, il lance l'animation suivante)

Ce code me semble correct mais le problème, c'est que pendant que l'animation des pions du joueur N se déroule, l'AsyncTask du joueur N+1 est lancé et s'exécute en parallèle : résultat, le joueur N+1 modifie ou déplace des pions que le joueur N essaie d'animer mais ils ont changé de place.

Bref, il faut que l'asyncTask du joueur N+1 reste en attente tant que toutes les animations du joueur N ne sont pas terminées.
J'ai essayé de mettre un SystemClock.sleep(3000) dans le onPreExecute, mais ca ne change rien sous debugger.

J'ai vaguement l'idée qu'il faut que dans le postExecute :
- Je récupère l'adresse du thread A en cours (celui de l'asyncTask je suppose ?)
- Que j'instancie un nouveau thread B qui va exécuter le display, mais je passe à ce nouveau thread B l'adresse du thread A suspendu
- Que je fasse un truc genre A.wait() sur ce thread A pour le suspendre
- Quand le thread B sait que toute les animations sont finies, il réveille le thread A (api ?) ce qui aura pour conséquence de terminer l'AsyncTask
en cours et de lancer l'asyncTask suivant.


Je ne suis pas sûr de l'ordre de ces étapes, ni si c'est la bonne piste à explorer (y a-t-il plus simple ?)...
Qu'en pensez-vous ? Avez-vous un exemple de code ?

Merci pour votre aide précieuse.
Franck