C# 如何创建一个做某事的计时器?
我对XNAC是个新手,我想知道如何在XNAC中创建一个计时器,它在几秒钟后就可以完成一些事情 我已经看到它满足了我的需要,但我不知道如何在XNAC中实现它# 我正试图用定时器在我的项目的特定时期制作一个闪烁的模型。因此,我需要知道如何启动计时器以及计时器如何切换模型的闪烁 谢谢。我就是这样做的 我有一个触发器行为的基类,在我有一个从触发器继承的计时器之后C# 如何创建一个做某事的计时器?,c#,xna,C#,Xna,我对XNAC是个新手,我想知道如何在XNAC中创建一个计时器,它在几秒钟后就可以完成一些事情 我已经看到它满足了我的需要,但我不知道如何在XNAC中实现它# 我正试图用定时器在我的项目的特定时期制作一个闪烁的模型。因此,我需要知道如何启动计时器以及计时器如何切换模型的闪烁 谢谢。我就是这样做的 我有一个触发器行为的基类,在我有一个从触发器继承的计时器之后 //-----------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------
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 );
}
}
}
//---------------------------------------------------------------------------------------------------------------------
公共类触发器
{
公共天体obj;
}
//---------------------------------------------------------------------------------------------------------------------
公共委托无效FireAction(天体对象发送器、触发器args args);
//---------------------------------------------------------------------------------------------------------------------
公共接口不可靠
{
虚火(天体发送器、触发器args args);
}
//---------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------
公共抽象类触发器:AstroObject
{
公众行动;
公开名单行动;
受保护的抽象无效检查条件(浮动秒);
受保护的bool被触发;
公共场所火灾=假;
//---------------------------------------------------------------------------------------------------------------------
受保护的覆盖void LocalCreate(out int UpdateOrder)
{
UpdateOrder=Orders.Update.Trigger;
IsFired=false;
}
//---------------------------------------------------------------------------------------------------------------------
受保护的重写void LocalDie(){}
//---------------------------------------------------------------------------------------------------------------------
公共密封覆盖无效更新(浮动秒)
{
检查条件(秒);
}
//---------------------------------------------------------------------------------------------------------------------
受保护的空火(触发器args args)
{
如果(被激发)返回;
foreach(FireAction f in Actions)f.Invoke(this,args);
如果(Fired!=null)Fired();
IsFired=!RearmOnFire;
}
//---------------------------------------------------------------------------------------------------------------------
公共覆盖无效渲染(Microsoft.Xna.Framework.Color){}
}
//---------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------
公共类TimeTrigger:Trigger
{
公共浮动区间;
公众浮存;
//---------------------------------------------------------------------------------------------------------------------
受保护的覆盖void LocalCreate(out int UpdateOrder)
{
LocalCreate(out UpdateOrder);
经过=间隔;
}
//---------------------------------------------------------------------------------------------------------------------
public void Start(){appeased=Interval;IsFired=false;}
//---------------------------------------------------------------------------------------------------------------------
受保护的覆盖无效检查条件(浮动秒)
{
如果(被激发)返回;
已用-=秒;
如果(经过在更新中执行以下操作
float elapsedTime = (float)gameTime.ElapsedGameTime.TotalSeconds;
timer -= elapsedTime
if(timer <= 0)
{
// Hanlde the blink here
timer = 5.0f; // Reset timer
}
然后有一个变量,比如
float timer = 5.0f; // Five seconds
然后更新
float elapsedTime = (float)gameTime.ElapsedGameTime.TotalSeconds;
timer -= elapsedTime
if(timer <= 0)
{
// Hanlde the blink here
timer = 5.0f; // Reset timer
}
timer-=elapsedTime
如果(计时器这可能很有用:嗨,迈克,谢谢你的回答。如果我不需要计时器,我如何停止计时器?当我需要计时器时,我如何重新启动计时器?嗨,迈克,谢谢,我已经通过创建另一个布尔值找到了如何停止和启动计时器。还有一个问题,你能教我如何为我的模型做透明效果吗?因为我已经尝试过了使用我只做2d xna,但类似的东西会起作用吗?device.RenderState.AlphaBlendEnable=true;嗨,迈克,它不起作用。没关系,我想我会放弃我心中的透明想法。