跳跃动画

时间:2013-10-22 16:26:52

标签: c# xna

stay我需要在我的精灵跳跃时制作动画。如果按下某个键但是它不起作用,我试图加载动画。我按 Space 键跳转。所有其他动画功能。所以,我的问题是通过按键加载动画。我想我可以使用GameTime.Elapsed.TotalMilliseconds,但我不确定。无论如何,我是新手,这是我的第一场比赛。

class Player
{
    PlayerAnimation animation;
    Animation walk;
    Animation stay;
    Animation jump;;
    public Vector2 position;
    public Vector2 velocity;
    public Rectangle rect;
    public bool jumping = false;
    public int health = 5;
    public Vector2 Position{ get { return position; } }


    public Player() { }

    public void Load(ContentManager Content) {

        walk = new Animation(Content.Load<Texture2D>("walk"), 46, 0.1f, true, rect);
        animazioneMinima = new Animation(Content.Load<Texture2D>("stay"),37, 0.15f, true, rect);
        jump = new Animation(Content.Load<Texture2D>("jump"), 51, 0.1f, true , rect);


    }

    public void Update(GameTime gameTime)
    {
        position += velocity;
        rect = new Rectangle((int)position.X, (int)position.Y, 43, 46);
        Input(gameTime);



        if (velocity.X != 0)
            PlayerAnimation.PlayAnimation(walk);

        else if (velocity.X == 0)
            PlayerAnimation.PlayAnimation(stay;
        if (velocity.Y < 10)
            velocity.Y += 0.4f;
    }


    private void Input(GameTime gameTime)
    {
        if (Keyboard.GetState().IsKeyDown(Keys.D))
            velocity.X = (float)gameTime.ElapsedGameTime.TotalMilliseconds / 3;
        else if (Keyboard.GetState().IsKeyDown(Keys.A))
            velocity.X = -(float)gameTime.ElapsedGameTime.TotalMilliseconds / 3;
        else velocity.X = 0f;


        if (Keyboard.GetState().IsKeyDown(Keys.Space) && jumping == false)
        {
            position.Y -= 5f;
            velocity.Y = -9f;
            jumping = true;
        }

    }


    public void Draw(GameTime gameTime, SpriteBatch spriteBatch)
    {
        SpriteEffects rotate = SpriteEffects.None;

        if (velocity.X >= 0)
            rotate = SpriteEffects.None;
        else if (velocity.X < 0)
            rotate = SpriteEffects.FlipHorizontally;

        PlayerAnimation.Draw(gameTime, spriteBatch, position, rotate);
    }
  }
}
我应该怎么做? :d

1 个答案:

答案 0 :(得分:0)

我不确切知道你的代码是如何工作的,但也许你可以写出类似的东西:

if (velocity.Y != 0)
{ 
PlayerAnimation.PlayAnimation(jump); 
velocity.Y -= 0.05f
}

和insted:

if (Keyboard.GetState().IsKeyDown(Keys.Space) && jumping == false)` 

你可以写:

if (Keyboard.GetState().IsKeyDown(Keys.Space) && velocity.Y == 0)

然后你可以完全跳过使用jump bool。