2013-10-23 14 views
-1

我想在按下某個鍵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); 
} 
} 
} 

回答

0

您可以使用通過該方法的參數傳遞給你的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 
    } 
} 
相關問題