2011-12-18 2 views
2

저는 XNA C#이 새롭고 몇 초 후에 뭔가를하는 XNA C#에서 타이머를 만드는 방법을 알고 싶습니다. 내가 필요하지 않습니다하지만 난 XNA C#으로 그것을 수행하는 방법을 모르는 a Flash tutorial을 본 적이무언가를하는 타이머를 만드는 방법?

내 프로젝트의 일정 기간에 깜박 모델을 만들기 위해 타이머를 사용하기 위해 노력하고있어

. 따라서 타이머를 시작하는 방법과 타이머가 내 모델의 깜박임을 전환하는 방법을 알아야합니다.

감사합니다. 이것은 내가 그것을 어떻게

+1

에 유용 할 수 있습니다 http://stackoverflow.com/questions/2795693/how-does-xna-timing-work –

답변

2

같은 것을 수행을 한 후 다음 업데이트에

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 
} 
+0

안녕 마이크, 답장을 보내 주셔서 감사합니다. 타이머가 필요 없으면 어떻게 중지합니까? 타이머가 필요할 때 어떻게 시작합니까? – Zainu

+0

안녕 마이크, 고마워, 나는 다른 부울을 생성하여 타이머를 멈추고 시작하는 방법을 알아 냈다. – Zainu

+0

또 다른 질문은 제 모델에 투명 효과를주는 방법을 가르쳐 주시겠습니까? 왜냐하면 나는 – Zainu

2

...

나는 트리거 동작의 기본 클래스가 있고, 나는 트리거에서 상속 타이머 ...

//--------------------------------------------------------------------------------------------------------------------- 
    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); 
      } 
     } 
    } 
관련 문제