2013-07-28 3 views
0

Je suis un débutant en développement de jeu et j'ai actuellement des problèmes avec mon jeu .... Je voudrais que le jeu mette à jour la toile chaque fois que je boucle afin de montrer ma déplacer le caractère d'une simple pression sur une image ... Invalidate() ne fonctionne pas pour moi ici car il affiche seulement la position de fin de mon caractère Voici le code correspondant:Android Invalidate() chaque fois qu'une boucle se produit

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    final int x = (int)event.getX(); 
    final int y = (int)event.getY(); 
    int action = event.getAction(); 

switch (action) { 
    case MotionEvent.ACTION_DOWN: 

      if (rollbounds.contains((int)x, (int)y)) 
      { 
       //dice roll 
       Random rand = new Random(); 

       move = rand.nextInt(6) + 1; 

       //end of dice roll 
       //move counting 

       for (int loop=move;loop>0;loop--) 
       { 
       if ((charypos >= 220)&&(charxpos == 9)) 
       { 
        Toast toast = Toast.makeText(getContext(), "You Win", Toast.LENGTH_SHORT); 
        toast.show(); 
        loop=1; 
       } 
       if (charxpos != 205&&charLeftMove==false) 
       { 

        for (int loop2 = 28;loop2>0;loop2--) 
        { 
         charxpos+=1; 
         //update or invalidate here 

        } 

Ce ici est un jeu de plateau où quand je touche le bouton de roulis, j'obtiendrais le personnage pour déplacer le nombre d'espaces sans à-coup, puisque invalider le fait passer à la position finale instantanément. L'aide est grandement appréciée

+0

essayer d'utiliser postInvalidate, et je voudrais essayer d'obtenir le mouvement lisse à l'extérieur du onTouchEvent, peut-être sur le onDraw, les tests si je dois bouger et re-invalidate (comme l'effet de défilement: si (mScroller.computeScrollOffset()) { int deltaX = actualX - mPrevX; postInvalidate(); } –

+0

donné mon code ci-dessus, diriez-vous s'il vous plaît me donner un exemple de code I suis un débutant donc j'ai sérieusement besoin de trucs pour continuer avant que je puisse l'essayer –

Répondre

0

Savez-vous que l'événement tactile est réellement dans le thread de l'interface utilisateur? Même si vous avez appelé l'invalide, le canevas ne dessinera rien tant que votre bloc de code entier n'aura pas été exécuté. Cela signifie que le système affichera l'interface utilisateur après votre code

for (int loop=move;loop>0;loop--) 

C'est pourquoi vous avez toujours trouvé la position finale. Vous devez déplacer votre code à case MotionEvent.ACTION_MOVE. N'utilisez pas de boucle dans un événement. Il suffit de faire le calcul une fois pour chaque événement tactile. Par exemple, globalement déclarer une variable, et d'augmenter la valeur par TouchEvent

int a = 0; 

public boolean onTouchEvent(MotionEvent event) { 
    final int x = (int)event.getX(); 
    final int y = (int)event.getY(); 
    int action = event.getAction(); 

switch (action) { 
    case MotionEvent.ACTION_MOVE: 
       ++a; 
       invalidate(); 
+0

Je vais essayer et dire n'importe quoi si cela fonctionne: D –

+0

J'ai été en mesure de saisir ce que vous avez dit yushullx mais je n'arrive pas à trouver un moyen de l'appliquer à mon jeu. Ce que je veux arriver, c'est le personnage à déplacer à la position donnée par le jet de dés sur une seule touche ... –

+0

vous pouvez utiliser un gestionnaire pour envoyer un message au fil de l'interface utilisateur pour le dessin. vérifier Android doc http://developer.android.com/reference/android/os/Handler.html – yushulx

Questions connexes