llSetTimerEventについて

はい、こんにちは。わたくしです。

今回もわたくしによるわたくしのためだけの忘備録です。

llSetTimerEvent(float)という命令があります。

この命令が実行されるとtimer(){処理}イベントに突入します。

 

 例えばllSetTimerEvent(10.0);と書くと10秒ごとにtimer(){処理}イベントが実行されます。

最初わたくしはこれはllSetTimerEventがすぐに発動されてその後10秒毎に timer(){処理}イベントが実行されるものだと思っていました。

しかしどうやら10秒経ってから発動されるようです。

10秒数えた後timer(){処理}が処理されるようです。

 

これがよく分かっていないポイントでした。

つまり、

 ====================

llSetTimerEvent(10.0);

timer(){ llOwnerSay(”あべし”);

}

====================

とあるとすると、まず10秒経たないと「あべし」と言ってくれません。

プログラムがllSetTimerEvent(10.0);に到達した時点では「あべし」とは言ってくれないのです。

10秒経って「あべし」、その後また10秒経って「あべし」と10秒毎に延々と「あべし」と言います。

 

またタイマーを切るにはllSetTimerEvent(0.0);のようにfloatの部分を0.0にすればOK。

だから以下のように書くと、

====================

llSetTimerEvent(10.0);

timer(){

llSetTimerEvent(0.0);

llOwnerSay(”あべし”);

} ====================

10秒後に「あべし」発言。

timer(){}に入るなりllSetTimerEvent(0.0);でタイマーを切るので一回のみの「あべし」発言でおしまい。

この1回きり発言を生かしたわたくしがよく使う例は ダイアログが出て10秒間何もボタンが押されなかったら「時間切れ~」というやつです。

 

以下に簡単な例を。

======================================================

 touch_start(integer x){//タッチしたら以下の処理発動

integer handle = llListen(~);//聞き耳を立てさせて(もちろんチャンネルはダイアログのと同じにしとく)

llDialog(~);//ダイアログを出す

llSetTimerEvent(10.0);//10秒後に時間切れを知らせる発言をするためにタイマーセット

}

listen(~){//ダイアログのボタンが押されたときの処理

llSetTimerEvent(0.0);//負荷がかからないようにtimerを閉じる

llRemoveListen(handle);//負荷がかからないようにllListenを閉じる

処理

}

 timer(){

llSetTimerEvent(0.0);//発言を1回だけにするためにタイマーを切る

llRemoveListen(handle);//負荷がかからないようにllListenを閉じる

llOwnerSay(”時間切れ~”);//時間切れを知らせる

}

======================================================

 以上です。間違ってるかもしれないのでアテにしないでください。

 

こちらのブログもよろしくお願いします。 ブロガーの方のやつ



0 コメント:

コメントを投稿