问题
I'm quite new in XNA C# and I would like to know how do I create a timer in XNA C# that does something after few seconds.
I've seen a Flash tutorial that does what I need but I don't know how to do it in XNA C#
I'm trying to use a timer to make a blinking model in certain period of my project. Therefore, I need to know how do I start the timer and how does the timer toggle the blinking of my model.
Thanks.
回答1:
Do something like below in update
float elapsedTime = (float)gameTime.ElapsedGameTime.TotalSeconds;
then have a variable for seconds like
float timer = 5.0f; // Five seconds
then in update
timer -= elapsedTime
if(timer <= 0)
{
// Hanlde the blink here
timer = 5.0f; // Reset timer
}
回答2:
This is how I do it...
I have a base class for the trigger behaviour, and after I have a Timer that inherits from Trigger...
//---------------------------------------------------------------------------------------------------------------------
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 );
}
}
}
来源:https://stackoverflow.com/questions/8552648/how-to-create-a-timer-that-does-something