ソラマメブログ

  

Posted by at

2007年06月28日

第6回 超初心者用スクリプト講座 ステートエントリー?

こんばんは。ペンです。
昨晩は友人のTさんとQooというSIMにある海賊カフェに行ってきました。
ここは前に観光ブログ担当のジャスミンさんと偶然発見した場所。
いいとこだったので、Tさんを連れて行った次第ですw
(ちなみにこのSIMは居住地区で、観光SIMではありません。)

海賊カフェも仕掛けがいっぱいあって楽しいのですが
それ以上に私たちの心を掴んで離さなかったのがここ!!



下水道w
もうリアルすぎですwたまりませんw
二人して、
「すごい落ち着くわ~」
って感心しきってましたw

######################################

それではスクリプト講座に移っていきましょう~
今回は前回の復習もかねてスクリプトを
新規で生成したときにできるNew Scriptを使って講座をすすめたい
と思います。

まず、今回のメインは何かと言うと
お題のとおりstate_entryについてです。

state_entry(){

}



これですね。

この講座を読んでいる人なら、毎回目にしてきたこの単語。
おまじないとか言って全く説明してきませんでしたw
面倒だったわけじゃないですよw
簡単のためですw

しかしながら、前回にtouch_startっていうのがでてきました。
内容は、オブジェクトがタッチされたかどうかを判断して
touch_start内のスクリプトを実行するというものでした。

では、このstate_entryっていつ実行されるのでしょうか?

はい、答えは簡単。スクリプトが生成、またはリセットされたときです。

じゃあここで、おなじみのスクリプトに登場してもらいましょう。

default{
  state_entry(){
    llSay(0, "Hello, Avatar!");
  }

  touch_start(integer total_number){
    llSay(0, "Touched.");
  }
}



今、state_entryには
llSay(0, "Hello, Avator!")

っていうコマンドが含まれています。このコマンドは
チャンネル0番でオブジェクトが
Hello, Avator!
って叫ぶというものです。

チャンネル0番は通常のチャットを表しています。普段会話で
使っているのはチャンネルの0番ということになりますね。
今は0のままでいいです。
また、叫ぶ内容はHello, Avataor!の部分を何かに変えればいいです。

いつstate_entryが実行されるかという話にもどりますが、
この場合だと、上記のとおりスクリプトが生成、またはリセットされたときにだけHello, Avator!って叫ぶよってことになります。

補足ですが Touched. はオブジェクトが触れられたときに
チャットをとおして叫びます。
(タッチイベントに関しては第5回講座を参照のこと)

ここで大事なのはstate_entry内が実行されるのはあくまでも
スクリプトが生成、またはリセットされたときだけということ
です。(ちなみにセーブした場合は自動的にリセットされます)

さて、ここで問題です。
オブジェクトを作って新しいボタンを押し、
上記のスクリプトを組み込みました。
次に、作ったオブジェクトをtakeし、さらにtakeしたオブジェクトを
もういちど出します。
この出したときにstate_entry内のコマンドは実行されるでしょうか?

答えはされません。この場合だと、Hello,Avator!!とは
言わないということです。
これはtakeしてもスクリプトはリセットされないためです。

では、どうすればオブジェクトを在庫目録から出すたびに
実行されるようなスクリプトを作ることができるのでしょう?

というのが次回のテーマですw
それでは御機嫌よう