Как создать таймер, который что-то делает? - PullRequest
2 голосов
/ 18 декабря 2011

Я довольно новичок в XNA C #, и я хотел бы знать, как создать таймер в XNA C #, который делает что-то через несколько секунд.

Я видел учебник по Flash это делает то, что мне нужно, но я не знаю, как это сделать в XNA C #

Я пытаюсь использовать таймер для создания мигающей модели в определенный период моего проекта.Поэтому мне нужно знать, как запустить таймер и как таймер переключает мигание моей модели.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 18 декабря 2011

Сделайте что-то вроде ниже в обновлении

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
} 
2 голосов
/ 18 декабря 2011

Вот как я это делаю ...

У меня есть базовый класс для поведения триггера, и после того, как у меня есть таймер, который наследует от триггера ...

    //---------------------------------------------------------------------------------------------------------------------
    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 );
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...