2016-09-09 11 views
0

Я новичок здесь и не совсем лучший, когда дело доходит до кодирования. (используя для этого изменение в моногаме XNA) Я успешно воссоздал класс для анимации моего листа спрайтов, который я создал, но проблема, с которой я столкнулся, заключается в том, что, как только я попытался реализовать нажатия клавиш вместе с анимацией, анимация перестает двигаться (застрял на первом кадре)Нужна помощь в предложении для реализации изменений анимации с помощью ввода с клавиатуры

мой класс обновления, который выглядит как этот

previousKBState = currentKBState; 
     currentKBState = Keyboard.GetState(); 

     if (previousKBState.IsKeyDown(Keys.D)) 
     { 
      playerSprite.LoadGraphic(Content.Load<Texture2D>("Sprites\\walk_right.png"), 5, 15, 672, 631, 30); 
     } 
     else if (previousKBState.IsKeyDown(Keys.A)) 
     { 
      playerSprite.LoadGraphic(Content.Load<Texture2D>("Sprites\\walk_left.png"), 5, 15, 672, 631, 30); 
     } 
     else 
     { 
      playerSprite.LoadGraphic(Content.Load<Texture2D>("Sprites\\idle_right.png"), 5, 10, 610, 423, 5); 
     } 

и это мой LoadGraphic класс

public void LoadGraphic(Texture2D texture, int rows, int columns, int width, int height, int animationSpeed) 
    { 
     this.Texture = texture; 
     this.rows = rows; 
     this.columns = columns; 
     this.width = width; 
     this.height = height; 
     this.animationSpeed = (float)1/animationSpeed; 

     totalElapsed = 0; 
     currentRow = 0; 
     currentColumn = 0; 
    } 

мой Розыгрыш класс

public void Draw(SpriteBatch spriteBatch, Vector2 position, Color color) 
    { 
    spriteBatch.Draw(Texture, 
     new Rectangle((int)position.X, (int)position.Y, width, height), 
     new Rectangle(currentColumn * width, currentRow * height, width, height), color); 
    } 

поэтому проблема, я думаю, что я бегу в том, что когда я держу D или клавиши вниз, линия кода LoadGraphics продолжает освежающий вызов другого класса до анимации может играть.

Это помогло бы, если кто-нибудь может дать мне какие-либо предложения, как это исправить Спасибо

ответ

0

Вы правы, вы сброс всех значений 0, в то время как ключ проходит вниз по телефону LoadGraphic каждый кадр. Вам нужно проверить, действительно ли правильная анимация уже играет, и ничего не делать в этом случае.

Кроме того, я бы не позвонил Content.Load<Texture2D>() из вашего кода обновления. Я бы загрузил все текстуры внутри метода LoadContent(), а затем использовал их, когда это необходимо.

+0

Благодарим вас за заключение, я просто вычислил его после загрузки его в LoadContent() – Tenten