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