在通过键盘输入实现动画更改的建议方面需要帮助
Need help in suggestion for implementing animation changes via keyboard input
我是新来的,在编码方面并不是最好的。
(为此使用 XNA 的 monogame 变体)
我已经成功地重新创建了一个 class 来为我制作的精灵 sheet 设置动画,但是我遇到的问题是,当我尝试实现按键和动画时,动画停止移动(卡在第一帧)
我的更新 class 看起来像这样
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 class
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;
}
我的抽奖Class
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 不断刷新对另一个 class 的调用动画可以播放了。
如果有人能给我任何解决这个问题的建议,我会很有帮助
谢谢
你是对的,你在通过调用 LoadGraphic
每帧按住键的同时将所有值重置为 0。您需要检查是否已经在播放正确的动画,并且在这种情况下什么都不做。
此外,我会避免从您的更新代码中调用 Content.Load<Texture2D>()
。我会在 LoadContent()
方法中加载所有纹理,然后在必要时使用它们。
我是新来的,在编码方面并不是最好的。 (为此使用 XNA 的 monogame 变体) 我已经成功地重新创建了一个 class 来为我制作的精灵 sheet 设置动画,但是我遇到的问题是,当我尝试实现按键和动画时,动画停止移动(卡在第一帧)
我的更新 class 看起来像这样
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 class
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;
}
我的抽奖Class
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 不断刷新对另一个 class 的调用动画可以播放了。
如果有人能给我任何解决这个问题的建议,我会很有帮助 谢谢
你是对的,你在通过调用 LoadGraphic
每帧按住键的同时将所有值重置为 0。您需要检查是否已经在播放正确的动画,并且在这种情况下什么都不做。
此外,我会避免从您的更新代码中调用 Content.Load<Texture2D>()
。我会在 LoadContent()
方法中加载所有纹理,然后在必要时使用它们。