System4.0 Tips 

 

 

System4.0で高機能タイマー

 

 

 普通、System4.0で時間を測定するときは、system.GetTime() を用いて、差を取ったりします。
ちゃんとしたタイマーを使いたいときは、sact_timer_t を使うと幸せになれます。

 

sact_timer_t の使い方


 sact_timer_t timer;
  A;
  int nClickWaitTime=timer.Get();

  timer.Set();
  int i;
  for(i=0;i<1000;i++){system.Output("hoge\n");}
  int nHogeTime=timer.Get();
 

みたいな。

 

ですが、このタイマはシステムと密接に関係しているので、使いづらいという事態が発生しかねません。

つまり、れつとれみたいなのです。あれの一部モードでは、背景は動いて、バーは動かず、AIは停止みたいな事をしています。
個別にいろいろと実装するのはものすごく大変でした。
なので、今度からはそれを楽ちんにするための、クラスを作ろうと考えたのがきっかけです。

 

そんなわけで、作ってみたのが、StartStop Timerってものです。
ちょっと高性能なタイマーです。

特徴としては、
・sact_timer_t の発展系。基本は同じ命令で。
・複数の時間軸を定義できる。
・ある時間軸は個別に、一時停止、レジューム、時間経過倍率設定 ができる。
・時間軸は、ミリ秒とカウンタ(FPSと一緒に使うと良い)の二種類が選べる。
・タイミングクラスと一緒に使うと、さらに楽ちん。

ソースを見てみる

※ 必要十分なテストを行っていません。問題があったら連絡下さい。

 

StartStop Timerの使い方
基本的に、sact_timer_t と同じです。


  ss_timer_t timer;
 A;
  int nClickWaitTime=timer.Get();

  timer.Set();
  int i;
  for(i=0;i<1000;i++){system.Output("hoge\n");}
  int nHogeTime=timer.Get();

 

複数使えますし、停止も出来ます。


  ss_timer_t timer1;
  ss_timer_t timer2;
  timer2.Stop();
 A;
  timer2.Resume();
  A;
  int nAllTime=timer1.Get();
  int nOneTime=timer2.Get();
 

時間の流れを変えることも出来ます。


  ss_timer_t timer1;
  ss_timer_t timer2;
  timer2.SetRate(0.5);
 A;
  int nAllTime=timer1.Get();
  int nHalfTime=timer2.Get();
 

FPSに依存させることも出来ます。


  ss_timer_t timer1;
  timer1.SetCountTick(true);
  while(true){
     //....なんらかの処理
     SACT_UPDATE();
     timer1.AddTick();
     int nFrames=timer1.Get();
  }

 

で、タイミングとの連携はこのようにやります。

例えば、1秒ごとに何かの処理を行いたい場合は、このようにします。


  ss_timer_t timer;
  ss_timming timm;
  timm.InitTimming(timer);
  timm.StartInterval(1000);
  while(true){
     //..何らかの処理
     SACT_UPDATE();
     if(timm.Check()){
       system.Output("1000ミリ秒経ちました。\n");
       m_timming.Start();
     }
  }
 

おー、非常にスバラシイですねー。
もちろん、タイマがFPS依存であれば、StartIntervalを60にすれば、60フレームごとに処理が行えます。
ちょっと一時停止したいときには、タイマを一時停止すればよいのです。おお、なんと簡単な!。

 

 感想

  時間と密接に動作が関係するゲームであれば、非常に便利なクラスになっていると思います。
今後いくつかのtipsはこの機能に強く依存していく可能性が高いです。だって、便利なんで。