timer


timer()

タイマイベントはllSetTimerEvent()関数(あなたは、一度この関数を呼ぶ必要があるだけです)。によって設定された時間間隔で発生します。

Note:他のイベントが実行されている間はイベントは決して走りません。
直前のイベントがキューから取り出され、実行された後に、キューに入れられたタイマイベントが実行されるでしょう。
言い換えるとllSetTimerEvent()はタイマイベントをイベントキューに入れる前に経過しなければならない時間を指定できるだけです。
必ずしも次のタイマーイベントが実行されるまでの時間が指定された時間と同じである保障はありません。

コールのたびに以下ように記述すると、ランダムにタイマイベントの間隔を変えることができます。
llSetTimerEvent(llFrand(#));
llFrand(#)関数は0から#までの値を返しますので、途中でイベントの発生が終わってしまう場合もあります。

default {
   [[state_entry]]() {
       llSetTimerEvent(1.0);
// generate a timer event every 1 second
   }
   
   timer() {
       llSetColor(<llFrand(1.0),llFrand(1.0)
                  ,llFrand(1.0)>,ALL_SIDES);
// set a random color
   }
}

注記:
タイマイベントが指定された直後にはイベントは発生しません。 イベント開始の引き金となる前に設定された時間を待ちます。 llSetTimerEvent(3600)の場合は、最初のイベント立ち上がるまでに1時間(60秒x60 = 3600 60分=秒)が経過するのを待たなければなりません。

llSetTimerEvevnt()を指定した直後にもイベントハンドラーで実行したい処理があるのであれば、その処理内容を新しい関数(以下のサンプルのneTimed()関数のように)れをハンドラのなかから呼び出せるようにした上でllSetTimerEvent()の直後にもその関数を呼び出巣ようにしてください。


neTimed()
{
   llSetColor(<llFrand(1.0),llFrand(1.0),
              llFrand(1.0)>,ALL_SIDES);
// set a random color
}
default {
   state_entry() {
       neTimed();
       llSetTimerEvent(1.0);
// generate a timer event every 1 second
   }
   
   timer() {
       neTimed();
   }
}

timerイベントの動作順序は「待つ」「イベント実行」「待つ」「イベント実行」・・・「待つ」「イベント実行」・・・の順ですが、
上のスクリプトの動作順序は「イベント実行」「待つ」「イベント実行」「待つ」「イベント実行」・・・「待つ」「イベント実行」・・・の順になります

何らかの状態に応じて異なる処理をタイマーイベントに要求する場合はグローバル変数をチェックしてください。
以下の例はタイマイベントがチェックするフローバル変数を設定するのにTouch()イベントを使用します.

integer on = 1; // set "on" flag to 1 (on)
float time = 1; // timer interval
default
{
   state_entry()
   {
       llSetTimerEvent(time);
// generate a timer event every 1 second
   }
   timer()
   {
       llOwnerSay("on");
   }
   [[touch]](integer touches)
   {
       if (on == 1)
       {
           on = 0;
           llSetTimerEvent(0);
           llOwnerSay("off");
       }
       else
       {
           on = 1;
           llSetTimerEvent(time);
       }
   }
}
最終更新:2008年10月04日 01:45