2007年07月03日
第8回 超初心者用スクリプト講座 stateを使おう
先日のネタですが、われらBECの犬ことfilloさんが人魚になる
グッズをくれました~。作った本人(犬?)は人魚になることは
できずわけのわからん生命体になってました。
それをこっそり?激写。

なんだろうこれは?w
なぜ犬が人魚を作ろうかと思ったのだろうと疑問に思ったのは内緒です。
せっかくなのでみんなで着て記念撮影することに。

普通に撮ろうとしたのになぜかみかんまんこと
tacticsがど真ん中に入りハーレム状態w
しかも上半身裸で仁王立ちw
やはりみんなで同じ格好したりしてワイワイするのは楽しいですw
またやりたいですね~
###################################################
それでは、第8回スクリプト講座と参りましょうか。
今回作りたいものはサウンドボックス。クリックで音楽再生、停止が
できるというものです。で、どんなものかというと

どーん
ただの箱です。外見は好きに作ってください。
大事なのはスクリプトですw外見作るの面倒やったんやろと
思った人。 そのとおりw
前回の講座で宣言したように、ネタアイテム作りたかったんですが
普通のアイテムになってしまいました。悔しいw
それでは今回使うスクリプトに登場してもらいましょう。
default{
touch_start(integer total_number){
llSay(0, "Music start");
llLoopSound("lapping_seagulls_01", 1);
state play;
}
}
state play{
touch_start(integer total_number){
llSay(0, "Music stop");
llStopSound();
state stop;
}
}
state stop{
touch_start(integer total_number){
llSay(0, "Music start");
llLoopSound("lapping_seagulls_01", 1);
state play;
}
}
今回のスクリプト講座で覚えてほしいのは
1. stateの使い方
2. サウンドの出し方、消し方
になります。
まずは1.stateの使い方について説明したいと思います。
今後使う機会が多くなると思うので、しっかりマスターしましょう。
では、始めにstateってなにって思った方もいると思うので簡単に
説明します。
stateとは状態のことを表します。たとえばドアがあるとします、
これには主に二つのstate(状態)があります。ひとつは、
開いているというstate(状態)、もうひとつは閉じているという
state(状態)です。また、これらは開ける、閉めるという
動作で「開いている→閉じている」、「閉じている→開いている」と
いう状態の遷移がおこります。それが以下の図になります。

それでは、今回作るサウンドボックスの場合はどんな
図になるでしょう?状態が遷移する引き金は誰かが触ったらという
ことにして考えてみてください。
答えは以下です。

これらをスクリプトであらわしたものが以下になります。
default{
touch_start(integer total_number){
state play;
}
}
state play{
touch_start(integer total_number){
state stop;
}
}
state stop{
touch_start(integer total_number){
state play;
}
}
これをさらに分解して
default{
}
state play{
}
state stop{
}
ここから考えてみましょう。さて、これらは一体何を表すのでしょう?
これらが先ほど説明したstate(状態)です。一番上にあるのが
default。defalutはスクリプトが実行される際に一番最初に入る
state(状態)です。他二つは再生状態、停止状態を表します。
これらはstate play, state stopで表されます。
stateの名前はスクリプトを書く人が独自に決定することができます。
たとえばドアの場合ではstate open, state closeとするといいでしょう。
これに触ること状態が移動するようにしたものが以下のものに
なります。
default{
touch_start(integer total_number){
state play;
}
}
state play{
touch_start(integer total_number){
state stop;
}
}
state stop{
touch_start(integer total_number){
state play;
}
}
スクリプトの流れを説明すると、まずスクリプトが実行されると
defaultに入るのは上記のとおりです。この状態で誰かが
触るのを待ちます。これはdefaultの{}内にあるtouch_startが
担当します。ここで、誰かが触るとstate playに移行します。
他のstateに移行するためには state stateの名前; を利用します。
後は同様でstate playで誰かが触るのを待って(state playの{}内
にあるtouch_startがこれを担当)、触られればstate stopへ
移行。state stopの状態で触られればstate playへ移行することに
なります。後は、触られることでstate play, state stopを
行き来することになります。図で現すとこんな感じ。
しかしながら、これでは状態が移行するだけで
特に何も起こりません。そこで、2. サウンドの出し方、消し方
が必要になります。まずサウンドを出すコマンドですが
llLoopSound("lapping_seagulls_01", 1);
になります。ただ、このコマンドはループ再生をするコマンドに
なります。どの音楽ファイルを使うかは""内で指定してください。
現状ではlapping_seagulls_01という音楽ファイルが実行されます。
次に音量を0~1で指定します。上記のスクリプトでは1になっています。
これが最大音量を表します。
しかしながら、ここで注意してほしいことがあります。
スクリプトにファイル名を記入したからといってそれだけで
音楽が再生されるわけではありません。このスクリプトを入れる
オブジェクトに再生したい音楽ファイルを入れる必要があります。
ここではオブジェクトにlapping_seagulls_01という音楽ファイルを
入れることになります。以下を参照してください。

最後に音楽をとめる方法ですが、以下のコマンドになります。
llStopSound();
これは特に説明要らないでしょう。
最後にこれら2つのコマンドのどこに組み込むかですが、状態は
あくまでもその状態を表します。再生状態なら再生をしている状態。
停止しているなら停止をしている状態。それぞれの状態で
触るのは何ボタンでしょう?再生している状態なら停止ボタンを。
停止しているなら再生ボタンをということになるでしょう。
これを踏まえてスクリプトを見ると理解が進むと思います。
さて、今回も長くなってしまったなぁとおもいつつ、
まぁ仕方ないかとも思いつつw
なかなか自分でもこれといってぐっとくる面白いものって
つくれませんねぇ。だれかネタくれ~
それでは、また次回w
第10回 スクリプト講座 ポーズボールを作ろう(1)
初心者用 スクリプト講座 再開します
第9回 超初心者用スクリプト講座 タイマーを使おう
第7回 超初心者用スクリプト講座 出したら実行する
第6回 超初心者用スクリプト講座 ステートエントリー?