2010-10-03 4 views
4

Je suis en train d'écrire un jeu pour Android et je pense avoir une faille fatale dans mon architecture et/ou code.Comment puis-je concevoir "animation manuelle" dans un jeu Android sans retards de code

L'architecture est essentiellement deux threads, l'un qui dessine l'écran en continu et l'autre contrôle le mouvement des tirages sur l'écran en fonction de l'entrée de l'écran tactile de l'utilisateur. Dans le dernier thread, je suis en train de faire une animation manuelle (insérer le terme correct ici), ce qui signifie que je déplace les drawables sur l'écran via des méthodes qui modifient le Drawables Rect que le jeu progresse. Le "non-non" je crois que je fais est d'insérer des retards dans ces méthodes, de sorte qu'il "apparaît comme une animation réelle."

Tout cela fonctionne très bien parce que je n'ai aucune raison de traiter les entrées de l'utilisateur pendant ces animations, mais ça m'embête vraiment que je concevais une faille dans beaucoup de travail avec mon jeu. Je suis sûr que beaucoup d'entre vous peuvent se rapporter à cela en termes de conception de code.

Quelle est la bonne façon de concevoir cette "animation manuelle" afin que mon code puisse encore traiter les événements de l'utilisateur (comme toucher l'écran), pendant que l'animation se produit?

Voici un exemple de référence d'une de mes méthodes:

public void BadAnimation() {  
    for (int k = 0; k < mAnimationHeight; k++) { 
     for (int i = 0; i < mRows; i++) { 
      for (int j = 0; j < mCols; j++) { 
       if (myObject.mFlag[i][j]) { 
        myObject[i][j].mRect.top++ 
       } 
      } 
     } 
     try { 
       Thread.sleep(3); 
     } 
     catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
     } 
    } 
} 

Répondre

0

La meilleure façon de le faire est à l'intérieur de votre boucle de jeu. Vous avez un chronomètre que vous avez exécuté s'il s'est écoulé effectuer votre tirage, réinitialiser le chronomètre. Sinon, ne faites rien.