はい、こんにちは。わたくしです。
今回もわたくしによるわたくしのためだけの忘備録です。
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 コメント:
コメントを投稿