2011-12-18 20 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); 
      } 
     } 
    } 
相关问题