2010-07-12 5 views
0

Je n'arrive pas à faire la transition entre ma marche et les animations inactives.Problèmes de transition de l'animation vers la marche inactive

Peut-être qu'il y a une meilleure façon de procéder? Le problème Le problème: Je peux vérifier qu'aucune touche n'est appuyée sur le clavier, mais l'animation de marche n'affiche que la première image et non l'animation complète. La question: Comment puis-je changer cela afin que lorsque l'utilisateur a fini de marcher, il va revenir à l'état "Idle" sans entrer en conflit avec les animations de marche à gauche et à droite.

private void UpdateMovement(KeyboardState aCurrentKeyboardState, GameTime gameTime) 
    { 
     timeSinceLastFrame += gameTime.ElapsedGameTime.Milliseconds; //Framerate control 

     if (timeSinceLastFrame > millisecondsPerFrame) //Framerate control 
     { 
      timeSinceLastFrame -= millisecondsPerFrame; //Framerate control 

      //Idle if no keys are down 
      if (mCurrentState == State.Idle) 
      { 
       Position.Y = 210; 
       currentImageIndex++; 
       if (currentImageIndex < 17 || currentImageIndex > 23) 
        currentImageIndex = 17; 
      } 
       //Walk Left 
      if (aCurrentKeyboardState.IsKeyDown(Keys.Left)) 
      { 
        mCurrentState = State.Walking; 
        if (currentImageIndex < 8 || currentImageIndex > 15) 
         currentImageIndex = 8; 
        Position.Y = 200; 
        currentImageIndex++; 
        Position.X += MOVE_LEFT; 
        if (currentImageIndex > 15) 
         currentImageIndex = 8; 
      } 
       //Walk Right 
       if (aCurrentKeyboardState.IsKeyDown(Keys.Right)) 
       { 
        mCurrentState = State.Walking; 
        if (currentImageIndex > 7) 
         currentImageIndex = 0; 
        Position.Y = 200; ; 
        currentImageIndex++; 
        Position.X += MOVE_RIGHT; 
        if (currentImageIndex > 7) 
         currentImageIndex = 0; 
       } 
      if (aCurrentKeyboardState.IsKeyDown(Keys.None)) 
       mCurrentState = State.Idle; 
     } 
    } 

Répondre

1

L'utilisation Keys.None n'est pas sémantiquement équivalent à « aucune touche ne », il est plutôt une valeur réservée par le système d'exploitation. Voir par exemple le documentation for the Keys enumeration. Par conséquent, je doute que ce code ramènera votre personnage à State.Idle après avoir atteint State.Walking, l'animation s'arrêtera juste lorsque vous relâcherez les touches. Pour vérifier si aucune touche n'est enfoncée, modifiez la dernière instruction if pour utiliser aCurrentKeyboardState.GetPressedKeys().Length == 0 à la place, ou permutez avec une instruction else qui serait alors atteinte en l'absence de Keys.Left ou de Keys.Right.

+0

Merci beaucoup. Je l'avais déjà fait et enlevé en raison d'un problème de bouclage dans une de mes méthodes d'attaque. Cependant, on m'a rappelé quelque chose que j'avais oublié. Merci encore! –

Questions connexes