需要帮助建议通过键盘输入实现动画更改

时间:2016-09-09 10:00:03

标签: animation xna sprite monogame sprite-sheet

我是新来的,在编码时并不是最好的。 (为此使用XNA的monogame变体) 我已经成功地重新创建了一个类来动画我制作的精灵表,但我遇到的问题是,当我尝试实现按键和动画时,动画停止移动(卡在第一帧)

我的更新类看起来像这样

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 :(得分:0)

你是对的,你通过每帧调用intercalate " something " . reverse $ map reverse list 按住键来重置所有值为0。您需要检查是否正在播放正确的动画,并且在这种情况下不执行任何操作。

另外,我会避免从您的更新代码中调用LoadGraphic。我会在Content.Load<Texture2D>()方法中加载所有纹理,然后在必要时使用它们。