2011-12-18 73 views
2

我在XNA C#中很新,我想知道如何在XNA C#中創建一個定時器,它在幾秒鐘後執行某些操作。如何創建一個可以執行某些操作的計時器?

我見過a Flash tutorial,做什麼,我需要,但我不知道該怎麼做,在XNA C#

我試圖用一個定時器,使在我的項目的一定期限閃爍模式。因此,我需要知道如何啓動計時器,計時器如何切換模型的閃爍。

謝謝。

+1

這可能是有用的:http://stackoverflow.com/questions/2795693/how-does-xna-timing-work – 2011-12-18 15:49:55

回答

2

這樣做下面在更新

float elapsedTime = (float)gameTime.ElapsedGameTime.TotalSeconds; 

然後有像

float timer = 5.0f; // Five seconds 
爲秒的可變

然後在更新

timer -= elapsedTime 

if(timer <= 0) 
{ 
    // Hanlde the blink here 
    timer = 5.0f; // Reset timer 
} 
+0

嗨邁克,感謝您的回覆。如果我不需要它,我該如何停止計時器?如何在需要時啓動計時器? – Zainu 2011-12-21 03:37:44

+0

嗨邁克,謝謝,我已經想通過創建另一個布爾值來停止和啓動計時器。 – Zainu 2011-12-21 04:11:08

+0

只是另一個問題,你能教我如何爲我的模型做透明效果嗎?因爲我嘗試使用 – Zainu 2011-12-21 04:11:55

2

這是我要做的事......

我有觸發行爲的基類,以後我有一個從觸發器繼承的定時器......

//--------------------------------------------------------------------------------------------------------------------- 
    public class TriggerArgs 
    { 
     public AstroObject obj; 
    } 

    //--------------------------------------------------------------------------------------------------------------------- 
    public delegate void FireAction(AstroObject sender, TriggerArgs args); 

    //--------------------------------------------------------------------------------------------------------------------- 
    public interface IFireable 
    { 
     void Fire(AstroObject sender, TriggerArgs args); 
    } 

    //--------------------------------------------------------------------------------------------------------------------- 
    //--------------------------------------------------------------------------------------------------------------------- 
    public abstract class Trigger : AstroObject 
    { 
     public Action Fired; 

     public List<FireAction> Actions; 
     protected abstract void CheckConditions(float Seconds); 
     protected bool IsFired; 

     public bool RearmOnFire = false; 

     //--------------------------------------------------------------------------------------------------------------------- 
     protected override void LocalCreate(out int UpdateOrder) 
     { 
      UpdateOrder = Orders.Update.Trigger; 
      IsFired = false; 
     } 

     //--------------------------------------------------------------------------------------------------------------------- 
     protected override void LocalDie() { } 

     //--------------------------------------------------------------------------------------------------------------------- 
     public sealed override void Update(float Seconds) 
     { 
      CheckConditions(Seconds); 
     } 

     //--------------------------------------------------------------------------------------------------------------------- 
     protected void Fire(TriggerArgs args) 
     { 
      if (IsFired) return; 

      foreach (FireAction f in Actions) f.Invoke(this, args); 

      if (Fired != null) Fired(); 

      IsFired = !RearmOnFire; 
     } 

     //--------------------------------------------------------------------------------------------------------------------- 
     public override void Render(Microsoft.Xna.Framework.Color color) { } 
    } 

    //--------------------------------------------------------------------------------------------------------------------- 
    //--------------------------------------------------------------------------------------------------------------------- 
    public class TimeTrigger : Trigger 
    { 
     public float Interval; 
     public float Elapsed; 

     //--------------------------------------------------------------------------------------------------------------------- 
     protected override void LocalCreate(out int UpdateOrder) 
     { 
      base.LocalCreate(out UpdateOrder); 
      Elapsed = Interval; 
     } 

     //--------------------------------------------------------------------------------------------------------------------- 
     public void Start() { Elapsed = Interval; IsFired = false; } 

     //--------------------------------------------------------------------------------------------------------------------- 
     protected override void CheckConditions(float Seconds) 
     { 
      if (IsFired) return; 

      Elapsed -= Seconds; 

      if (Elapsed <= 0) 
      { 
       Elapsed = Interval; 
       Fire(null); 
      } 
     } 
    } 
相關問題