Нужна помощь в предложении для реализации изменений анимации с помощью ввода с клавиатуры

Я новичок здесь и не совсем лучший, когда дело доходит до кодирования. (для этого используется вариация 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 или A, строка кода LoadGraphics продолжает обновлять вызов другого класса, прежде чем анимация сможет воспроизводиться.

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

1 ответ

Решение

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

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

Другие вопросы по тегам