C# 当我按下一个键时,如何在几秒钟内创建一个方法?

C# 当我按下一个键时,如何在几秒钟内创建一个方法?,c#,xna,C#,Xna,我想在按下一个键后的2秒内制作一个动画。 例如,我想加载一个用于拍摄的动画,我希望它只需要2秒钟,然后它将返回到“停留”动画 class Player { PlayerAnimation animation; Animation walk; Animation stay; Animation jump;; public Vector2 position; public Vector2 velocity; public Rectangle rect; public bool jumping = f

我想在按下一个键后的2秒内制作一个动画。 例如,我想加载一个用于拍摄的动画,我希望它只需要2秒钟,然后它将返回到“停留”动画

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);
}
}
}
职业玩家
{
播放动画;
动画行走;
动画停留;
动画跳跃;;
公共向量2位置;
公共矢量2速度;
公共矩形矩形;
公共布尔跳跃=错误;
公共卫生=5;
公共向量2位置{get{return Position;}}
公共播放器(){}
公共无效加载(ContentManager内容){
walk=新动画(Content.Load(“walk”),46,0.1f,true,rect);
animazioneMinima=新动画(Content.Load(“停留”),37,0.15f,true,rect);
跳跃=新动画(Content.Load(“跳跃”),51,0.1f,true,rect);
}
公开作废更新(游戏时间游戏时间)
{
位置+=速度;
rect=新矩形((int)位置.X,(int)位置.Y,43,46);
输入(游戏时间);
如果(速度X!=0)
播放动画(步行);
否则如果(速度X==0)
播放动画(停留;
if(速度Y<10)
速度Y+=0.4f;
}
私有无效输入(游戏时间游戏时间)
{
if(Keyboard.GetState().IsKeyDown(Keys.D))
velocity.X=(float)gameTime.ElapsedGameTime.totalmillizes/3;
else if(Keyboard.GetState().IsKeyDown(Keys.A))
velocity.X=-(float)gameTime.ElapsedGameTime.TotalMillistics/3;
否则,速度X=0f;
if(Keyboard.GetState().IsKeyDown(Keys.Space)和&jumping==false)
{
位置Y-=5f;
速度Y=-9f;
跳跃=正确;
}
}
公开无效抽牌(游戏时间,SpriteBatch SpriteBatch)
{
SpriteEffects rotate=SpriteEffects.None;
如果(速度X>=0)
旋转=精灵效果。无;
否则如果(速度X<0)
旋转=SpriteEffects.fliphorizontal;
玩家形象。画图(游戏时间、spriteBatch、位置、旋转);
}
}
}

您可以使用通过方法参数传递给您的
GameTime
,常见的解决方案是“保存”开始
GameTime
,每次游戏循环迭代检查差异:

private GameTime animGameTimeStart;
public void Update(GameTime gameTime)
{
    //When starting the animation:
    this.animGameTimeStart = gameTime;

    if(gameTime.ElapsedTime - animGameTimeStart.ElapsedTime <= TimeSpan.FromSeconds(2))
    { 
        //Set again to Idle
    }
}
private GameTime animmgametimestart;
公开作废更新(游戏时间游戏时间)
{
//启动动画时:
this.animGameTimeStart=游戏时间;
如果(gameTime.ElapsedTime-animGameTimeStart.ElapsedTime