ソラマメブログ

2008年02月21日

【講座】誰でもできるLSL IF


LSL 講座 リンク

jvnです。
前回の講座はいかがだったでしょうか?
ペースが早い、わからないと思う方はコメントかメッセージをください。
その部分をもう一度解説します。
こういうのは聞いた方が、教える側にとっても教わる側にとってもプラスだと思います。
遠慮せずに聞いてくださいね。



integer FG = TRUE; // ①
default
{
touch_start(integer num){

if(FG) // ②
{
llTargetOmega(<1,0,0>,PI,.5);
}else{
llTargetOmega(<1,0,0>,0,0);
}

FG = !FG; // ③

}
}


復習



今日のサンプルコードです。
前回の予告から、②が書き換えられています。
また変更です。ごめんなさい。

まず、流れはわかりますか?
何を行ったときに、
どこが実行されるか(実行の内容はわからなくてもいいです)
把握できてますか?

まずは流れを理解することが大事です。
これは、講座の 基本 を見たらわかるはずですね。


変数は何が宣言されていますか?
その変数の型は 何ですか?
integer 型 は 整数です。


今日学ぶこと



今日は IF の使い方を学びます。
これを覚えると
変数の値の変化に応じて、処理を変えることができます。

今日のサンプルは、タッチを押す毎に、
回転が始まったり止まったりするスクリプトです。
これは応用が利きますね^^

その前に、型 integer の 1と0 の関係 と 定数を学びます。
1と0の関係は、コンピュータ特有の考え方なので、覚えましょう。


コンピュータの歴史



昔々のお話です。
最初のコンピュータは、真空管をたっくさんつなげてつくられていました。
真空管一個一個を ON か OFF にして、その状態を組み合わせて処理を行っていました。

この ON か OFF かという考え方は 今も生きています。

コンピュータは すべて 1か0 で判断する。
という話し、聞いたことありませんか?

この 1 が ON のこと
0 が OFF のことです。

1 を TRUE
0 を FALSE とも呼びます。


まずは、前提知識として、昔話しでした。


定数



①を見てみましょう。

integer FG = TRUE;


TRUE て変数?
でも宣言してないよ??

実は、よく使う値は あらかじめ リンデンさんが宣言しています。

この値は変数の様に変化することができないので、
定数と言います。

変数はころころ変わりますが、
定数はゆうづうがきかない頑固者です。

TRUE の正体を知るには、TRUE をクリックして、LSL PORTAL 英 をクリックしましょう。
これは、リンデン公式 の LSL サイトです。

integer TRUE = 1;

と書いてあります。
そうか、TRUE は1なんだ!

他の定数はどんなのがあるの?
という方は、 LSL IncSearch で [constants] と打ってください。
でてきたのが 定数の一覧です。
ほー

①では、integer FG を宣言して TRUE ( 1 ) をセットしました。

これは、こう書いても動作は同じです。


integer FG = 1;


じゃぁ、なんで わざわざ TRUE を使うのでしょう?

それは、意味が違うからです。

1 をセットしていたら、
ただの整数なので これは 2 とか 10 とか 24とか(jvnの年齢) 4096 とかがはいるかもしれないですね。

だけれど、 TRUE をセットしていたら
ははぁ、これは TRUE か FALSE しかはいらないんだな、と
勘でわかります。

このように、プログラムを自分以外の人が見たときにわかりやすくする
このことは、とても大事なことです。

自分しか見ないよ、というときも同じです。
半年後の自分が見てもわかるように書こう、と思いましょう。
半年後に 何か動作を変えたくなったとき、わかりにくいプログラムだと 全部書き直したほう早いです。
もしかしたら、一カ所変えるだけでいいのかもしれないのに!

定数と、基本編で話したインデントを使ってわかりやすいプログラムを書きましょう。




③の行は何をやっているんでしょうか?


FG = !FG;


FG に !FG を入れていますね。

! は 逆 という意味です。
TRUE の逆は FALSE です。

実は、この逆は TRUE と FALSE の場合だけ使えます。

3 の逆 とか 4 の逆というのも求められますが、
話しがややこしくなりますし、上級な技なので、この講座では説明をはぶきます。
0と1の逆 は定番なので覚えましょう。

ここでは
FG に TRUE が入っていれば、!FG は FAlSE。
FG に FALSE が入っていれば、!FG は TRUE。

③をとおるたびに、FG が TRUE,FALSE,TRUE,FALSE と交互に代わっていくのがわかりますね。


IF



さぁ、最後です。
②の IF 。
今回の目玉です。
IF ってどういう仕組みでしょう?


if(TRUE){
// TRUE のときはここをとおる
}else{
// FALSE のときはここをとおる
}


これだけです。
覚えるしかありません。

こんな変形技もあります。


if(TRUE){
// TRUE のときはここをとおる
}


TRUE の時だけ とおる。

今回のソースでは、タッチされるたびに、③で FG が交互に TRUE、FALSE と代わっていくので
IFで実行する関数がかわりますね。
なので、回転がON/OFF代わるわけです。

なるほど。

じつは、このTRUE とFALSE は条件式という式で得ることもできます。


FG = (NUMBER == 10);
if(FG){
}


== は 等しいとき、です。
変数 NUMBER が 10 と等しいとき、FG に TRUE が入ります。
それ以外のときは、FALSEが入ります。

【世界のナベアツ】 さんは 3の倍数のとき 馬鹿になるそうですね。
これを プログラムで書くなら こうです。


FG = ((NUMBER % 3) == 0);
if(FG){
llSay(0,"BAYO----NN"); // ばかになる!
}else{
llSay(0,"HUM"); // ばかにならない!
}


NUMBER % 3 は ナンバーを 3で割った余り という意味です。
余りが 0 なら FG = TRUE、
それ以外なら FG = FALSE
ですね。

このように、IFを使うと変数の値に応じて いろいろプログラムの動作をかえられます。
まずは、ON/OFF で動作を変えられる技 マスターしてみてください^^


今日のまとめ



今日は 0 と 1 の関係を学びました。
0 と 1 は FALSE と TRUE。
これは覚えましょう。

FALSE と TRUE は定数で、正体はinteger の 0 と 1。

(5 == 4) は FALSE
(1 == 1) は TRUE

ですね。

TRUE と FALSE を使うと IF で条件ごとに違う処理ができました。


if(FG){
// TRUE のとき
}else{
// FALSE のとき
}


この書き方は丸暗記しましょう。


次回予告



次回は、timer を使った処理を考えましょう。
実践編です。


integer FG = TRUE;
integer NUM = 0;
default
{
touch_start(integer num){

if(FG)
{
llSetTimerEvent(1);
}else{
llSetTimerEvent(0);
}

FG = !FG;

}

timer()
{
llSay(0,(string)NUM);
NUM += 1;
}



タイマーを使った処理の行いかた
タイマーを使うときの注意(SIMに負荷をかけないこと)
を学びましょう。

LSL 講座 リンク

タグ :LSL初級

同じカテゴリー(LSL講座)の記事
 【中級】センサースクリプトに挑戦 (2008-03-14 18:59)
 【講座】誰でもできるLSL touch (2008-02-26 12:10)
 【講座】誰でもできるLSL Listen (2008-02-23 10:34)
 【講座】誰でもできるLSL timer (2008-02-22 12:00)
 【講座】誰でもできるLSL IF 質問 (2008-02-21 15:03)
 【講座】誰でもできるLSL 変な数 (2008-02-20 12:05)
Posted by Jvn Writer at 12:10│Comments(2)LSL講座
この記事へのトラックバック
こなさんより質問いただきましたので、回答させていただきます^^llTargetOmega に渡している引数例文からみると (,PI,.5) の部分。 それぞれどういう意味なのでしょうか。それとも意味...
【講座】誰でもできるLSL IF 質問【If SL = RL then ..】at 2008年02月21日 15:03
この記事へのコメント
LSL講座拝見させていただいています。
お言葉に甘えて質問してみます。

・・えっと、しょーもないところでつまづいています^^;
変数・・でいいのかな?が、よくわかりません。
例文からみると (<1,0,0>,PI,.5) の部分。 それぞれどういう意味なのでしょうか。
それとも意味を気にすることなく「そういうものだから」と入力するものなのでしょうか?
前の<1,0,0>っていうのはXYZの数字かな?PIってなに?? って感じです^^;

あとinteger FGの「FG」っていう単語の意味はなんでしょうか?


プログラム文の組み方の流れについては、今の所なんとなく理解できそうです。なんとなくですが。


ちなみに私もずっと引数を「いんすう」って読んでました・・ひゃー、恥ずかしい><
Posted by こな at 2008年02月21日 13:09
大変いい質問だったので、
 http://jvn.slmame.com/e149427.html
で答えさせていただきました

流れが理解できているのはとてもいいことです!

いんすう 誰も教えてくれませんもんねー。
私はテレビを見ないので新聞に書いてあった 団塊 を だんこん とよんでました。
指摘してくれたのが母でよかった。。
Posted by Jvn WriterJvn Writer at 2008年02月21日 15:05
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。