我在XNA C#中很新,我想知道如何在XNA C#中創建一個定時器,它在幾秒鐘後執行某些操作。如何創建一個可以執行某些操作的計時器?
我見過a Flash tutorial,做什麼,我需要,但我不知道該怎麼做,在XNA C#
我試圖用一個定時器,使在我的項目的一定期限閃爍模式。因此,我需要知道如何啓動計時器,計時器如何切換模型的閃爍。
謝謝。
我在XNA C#中很新,我想知道如何在XNA C#中創建一個定時器,它在幾秒鐘後執行某些操作。如何創建一個可以執行某些操作的計時器?
我見過a Flash tutorial,做什麼,我需要,但我不知道該怎麼做,在XNA C#
我試圖用一個定時器,使在我的項目的一定期限閃爍模式。因此,我需要知道如何啓動計時器,計時器如何切換模型的閃爍。
謝謝。
這樣做下面在更新
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
}
這是我要做的事......
我有觸發行爲的基類,以後我有一個從觸發器繼承的定時器......
//---------------------------------------------------------------------------------------------------------------------
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);
}
}
}
這可能是有用的:http://stackoverflow.com/questions/2795693/how-does-xna-timing-work – 2011-12-18 15:49:55