我在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