2008年02月22日
【講座】誰でもできるLSL timer
jvnです。
治りそう治りそうといいながら、風邪がなかなか治りません。
今年の風邪は長引くなぁ、と思って検索してみたら
毎年同じことが言われているようです。。。
LSL 講座 リンク
今回はtimer を使った処理を考えましょう。
実践編です。
次の点がわかるか、確認しましょう。
今日は、タイマーイベントの使い方を学びます。
まず、タイマーのセットの仕方を学びます。
続いて、タイマーで起動されるイベントを学びます。
最後に、タイマーを使う上での注意点を学びます。
最後の注意点は、SIMに負荷をかけないために
とても大事なことなので必ず学んでください。
タッチイベントがおこると
1回目は①
2回目は②
3回目は①
・
と交互に関数が実行されますね。
わからない方は、前回の LSL講座 IF を復習してください。
ここで実行されている関数が timer をセットする関数です。
引数に、何秒置きにタイマーを実行するかセットします。
5 がセットされれば、5秒置きにタイマーが実行されます。
0 がセットされれば、タイマー解除になります。
セットの仕方、以上。
察しの良い方はソースを見ただけでわかったかもしれません。
timerの時間がたつと、timer() イベントの中が実行されます。
10回 timer() が実行されたら、NUMBER の値を0にして、
タイマーをとめています。
これは、次のタイマーの注意点を考えているからです。
LSL Portal にLSL でおこなってはいけないことについて書いてあります。
http://www.slmame.com/admin/entry.php
5秒以内のタイマーは使わないようにしましょう。
これは、今回のように動かしてすぐとめるようなものならば、該当しないと思います。
しかし、常に動かすものならば、1秒に一回処理なんてことはやめるようにしましょう。
理由は、SIMの負荷を軽減するためです。
どうして、SIMに負荷をかけてはいけないのでしょうか?
SIMは みなさんが使っているパソコンと同じコンピューターです。
最近はパソコンの性能があがってきているので、
サーバー専用機をつかわないでパソコンを使うことが増えてきているので
言葉どおり、サーバーも同じパソコンを使っているかもしれません。
LSLはサーバー上で実行されます。
ですから、重いプログラムや動きっぱなしのプログラムがあると
サーバーは処理が重くなってしまいます。
ラグや、ひどくなるとサーバー落ちの原因になることもあります。
みなさんがよかれと思ってつくったLSLが、
サーバーを落としてしまったら悲しいですよね。
LSLをつくるときは、サーバーに負荷をかけないように工夫しましょう。
今回は、テクニックが2つ使われています。
これは、キャストという技です。
型を変換したい場合は、このように行います。
これは、整数型を 文字型に変換しています。
llSay の2番目の引数は stringなので、
integer を渡したい場合はこのように行わなければいけません。
これは、 NUMBER = NUMBER + 1; と同じです。
NUMBER に 1 足すという意味です。
この2つのテクニックもよく使うテクニックなので覚えてしまいましょう^^
今回は タイマーのセットの仕方、
タイマーイベントの呼び出されるタイミング、
キャストと 整数に数字を足す方法を学びました。
あまり新しいことはありません。
わからないことがあったら、今のうちに復習してわかるようにしましょう。
質問することはとてもよいことです。
遠慮なくコメントなりトラックバックなりしてください。
手を動かしてコーディングすることは、理解の助けになります。
コピーで終わりでなく、コーディングしましょう。
次回はLSLでチャットの発言をしたり、
他の人の発言を聞くための仕組みについて解説します。
サンプルソースは以前紹介したマイクスクリプトです。
こいつも見逃せませんね!
LSL 講座 リンク
治りそう治りそうといいながら、風邪がなかなか治りません。
今年の風邪は長引くなぁ、と思って検索してみたら
毎年同じことが言われているようです。。。
LSL 講座 リンク
今回はtimer を使った処理を考えましょう。
実践編です。
サンプルソース
integer FLAG = TRUE;
integer NUMBER = 0;
default
{
touch_start(integer num){
if(FLAG)
{
llSetTimerEvent(5); // ①
}else{
llSetTimerEvent(0); // ②
}
FLAG = !FLAG;
}
timer() // ③
{
llSay(0,(string)NUMBER);
NUMBER += 1;
if(NUMBER==10)
{
llSetTimerEvent(0);
NUMBER=0;
}
}
復習
次の点がわかるか、確認しましょう。
- 最初のステートはどこか
- タッチするたびに、どの部分が実行されるか
今日学ぶこと
今日は、タイマーイベントの使い方を学びます。
まず、タイマーのセットの仕方を学びます。
続いて、タイマーで起動されるイベントを学びます。
最後に、タイマーを使う上での注意点を学びます。
最後の注意点は、SIMに負荷をかけないために
とても大事なことなので必ず学んでください。
タイマーセットの仕方
タッチイベントがおこると
1回目は①
2回目は②
3回目は①
・
と交互に関数が実行されますね。
わからない方は、前回の LSL講座 IF を復習してください。
ここで実行されている関数が timer をセットする関数です。
引数に、何秒置きにタイマーを実行するかセットします。
5 がセットされれば、5秒置きにタイマーが実行されます。
0 がセットされれば、タイマー解除になります。
セットの仕方、以上。
タイマーの実行
察しの良い方はソースを見ただけでわかったかもしれません。
timerの時間がたつと、timer() イベントの中が実行されます。
10回 timer() が実行されたら、NUMBER の値を0にして、
タイマーをとめています。
これは、次のタイマーの注意点を考えているからです。
タイマーの注意点
LSL Portal にLSL でおこなってはいけないことについて書いてあります。
http://www.slmame.com/admin/entry.php
5秒以内のタイマーは使わないようにしましょう。
これは、今回のように動かしてすぐとめるようなものならば、該当しないと思います。
しかし、常に動かすものならば、1秒に一回処理なんてことはやめるようにしましょう。
理由は、SIMの負荷を軽減するためです。
どうして、SIMに負荷をかけてはいけないのでしょうか?
SIMは みなさんが使っているパソコンと同じコンピューターです。
最近はパソコンの性能があがってきているので、
サーバー専用機をつかわないでパソコンを使うことが増えてきているので
言葉どおり、サーバーも同じパソコンを使っているかもしれません。
LSLはサーバー上で実行されます。
ですから、重いプログラムや動きっぱなしのプログラムがあると
サーバーは処理が重くなってしまいます。
ラグや、ひどくなるとサーバー落ちの原因になることもあります。
みなさんがよかれと思ってつくったLSLが、
サーバーを落としてしまったら悲しいですよね。
LSLをつくるときは、サーバーに負荷をかけないように工夫しましょう。
テクニック1
今回は、テクニックが2つ使われています。
llSay(0,(string)NUMBER);
これは、キャストという技です。
型を変換したい場合は、このように行います。
これは、整数型を 文字型に変換しています。
llSay の2番目の引数は stringなので、
integer を渡したい場合はこのように行わなければいけません。
NUMBER += 1;
これは、 NUMBER = NUMBER + 1; と同じです。
NUMBER に 1 足すという意味です。
この2つのテクニックもよく使うテクニックなので覚えてしまいましょう^^
まとめ
今回は タイマーのセットの仕方、
タイマーイベントの呼び出されるタイミング、
キャストと 整数に数字を足す方法を学びました。
あまり新しいことはありません。
わからないことがあったら、今のうちに復習してわかるようにしましょう。
質問することはとてもよいことです。
遠慮なくコメントなりトラックバックなりしてください。
手を動かしてコーディングすることは、理解の助けになります。
コピーで終わりでなく、コーディングしましょう。
次回のサンプルソース
次回はLSLでチャットの発言をしたり、
他の人の発言を聞くための仕組みについて解説します。
サンプルソースは以前紹介したマイクスクリプトです。
こいつも見逃せませんね!
default{
state_entry(){
llListen(1, "", llGetOwner(), "");
llListen(3, "", llGetOwner(), "");
llListen(5, "", llGetOwner(), "");
}
listen(integer channel, string name, key id, string message){
if(channel == 1){
llWhisper(0,message);
}else if(channel == 3){
llSay(0,message);
}else if(channel == 5){
llShout(0,message);
}
}
}
LSL 講座 リンク
この記事へのトラックバックURL
http://jvn.slmame.com/t149715