Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何创建一个做某事的计时器?_C#_Xna - Fatal编程技术网

C# 如何创建一个做某事的计时器?

C# 如何创建一个做某事的计时器?,c#,xna,C#,Xna,我对XNAC是个新手,我想知道如何在XNAC中创建一个计时器,它在几秒钟后就可以完成一些事情 我已经看到它满足了我的需要,但我不知道如何在XNAC中实现它# 我正试图用定时器在我的项目的特定时期制作一个闪烁的模型。因此,我需要知道如何启动计时器以及计时器如何切换模型的闪烁 谢谢。我就是这样做的 我有一个触发器行为的基类,在我有一个从触发器继承的计时器之后 //-----------------------------------------------------------------

我对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;嗨,迈克,它不起作用。没关系,我想我会放弃我心中的透明想法。