ソラマメブログ

2007年06月24日

第5回 超初心者用スクリプト講座 タッチイベントを使おう

こんばんは。ペンです。
前回にキャンピングにはまってますって言ってましたが、
たどりついてしまいましたよ。カジノにw
もともとキャンピングでレートのいいとこ
どこかな~って検索かけててただけでいこうっていう気は
まったくなかったのですよw
またまいいとこがカジノやったというだけで。
最初は普通にキャンピングしてたんですけど、
ときどき流れてくるピロリロリ~ンっておとにやられましたねw
ま、ちょっとくらいやってもいいか~って感じでやり始めました。
10払って、負け。
また10払って、負け。
次こそは、、、負け。

...

まぁ、こんな感じでやってたら100L$が海の藻屑に。。。
む~ん、キャンピング5時間分が~
もうやらん、絶対やらんぞ~


さて、雑談はこれくらいにして、スクリプト講座です。
今回ご紹介するアイテムはこれ。

第5回 超初心者用スクリプト講座 タッチイベントを使おう

あれ?前と同じ?
ええ、そうですイスです。前に作ったイスは単にちゃんと座れると
いうだけで、面白味も何もありませんでした。いけませんねw
それでです。
今回はイスに触れることによってひっくり返る
いたずらイスを作ることにしました。

さて、出来上がりはどんな感じになるかというと…
まずはビフォー。

第5回 超初心者用スクリプト講座 タッチイベントを使おう

そしてアフター。

第5回 超初心者用スクリプト講座 タッチイベントを使おう

しっかりとひっくり返ってキャラクターの頭が地面に突き刺さって
いるのがわかりますね~。

用意するものは第4回スクリプト講座で作ったイス。
これを元に新たなスクリプトを足していきます。

まず、スクリプトを出す前に今回のスクリプトにおいて
何が必要なのか考えてみましょう。

・変数 ひっくり返った状態にあるのか、どうかの判断基準
・タッチ イスが触られたかどうかを感知する仕組み
・回転 ひっくり返る動作、元に戻す動作
・分岐 そのままw

これだけあれば目的の物が作れそうです。
流れとしては、以下のようになります。

誰かがイスに触りました(タッチ)。
もし(分岐)、イスが普通の状態(変数)なら
ひっくり返す(回転)
そうでないなら
普通の状態にもどす(回転)

これをスクリプトで表現したものが以下のスクリプトです。
ではこれを踏まえて、スクリプト自身の解説をしていきます。

integer normal;

default
{
  state_entry(){
    normal = TRUE;
    llSitTarget(<0.29,0.0,0.31>, llEuler2Rot(<0.0, 0.0, 0.0> * DEG_TO_RAD));
  }

  touch_start(integer i){
    if(normal == TRUE){
      llSetRot(llEuler2Rot(<0.0, 180.0, 0.0> * DEG_TO_RAD));
      normal = FALSE;
    }else{
      llSetRot(llEuler2Rot(<0.0, 0.0, 0.0> * DEG_TO_RAD));
      normal = TRUE;
    }
  }
}



まずはこれ

integer normal;




変数です。変数といっても何だそれは??となるかと思いますw
簡単に言うと値を保存しておくような箱だとおもってください。
今回はnormalという名前の箱を用意しました。この箱の値がTRUEであるならイスは普通の状態、この箱の値がFALSEであればひっくり返っている
状態です。

次に

touch_start(integer i){

}




これが誰かがイスに触ったかどうかを感知するおまじないです。
もし、だれかがイスに触ったなら、このtouch_startの{}内にある
スクリプトが実行されます。

次にこれです。

llSetRot(llEuler2Rot(<0.0, 180.0, 0.0> * DEG_TO_RAD));




これがイスを回転させます。ただし、第3回の講座でやったような
永続的に回転し続けるようなものではなくて、オブジェクトを一定の
回転角度分ずらすようなものだと思ってください。上記の場合であれば
通常角度からy軸を中心に180度回転させたものになります。
表記方法ですが、第4回と同様に<0.0, 180.0, 0.0>の部分にだけ注目して値を変更してください。前から、x軸,y軸,z軸になります。

そして最後に

if(normal == TRUE){

}else{

}



の部分です。これが分岐を表します。
もし、変数normalの中身がTRUEであるなら最初の{}内を、
そうでなければ後ろの{}内を実行します。
また==は同じという状態を表します。

この4つの点を踏まえて、スクリプトをやりたいことの流れと
比較しながら眺めてください。なんとなくわかると思います。

integer normal;

default
{
  state_entry(){
    normal = TRUE;   // normalにイスが普通の状態であることを記入
    llSitTarget(<0.29,0.0,0.31>, llEuler2Rot(<0.0, 0.0, 0.0> * DEG_TO_RAD));   // 着席位置の調整(第4回参照のこと)
  }

  touch_start(integer i){
    if(normal == TRUE){   // イスが普通の状態であるならば
      llSetRot(llEuler2Rot(<0.0, 180.0, 0.0> * DEG_TO_RAD));   // ひっくり返す
      normal = FALSE;   // 変数にnormalにひっくり返った状態であることを記す     }else{   // イスが普通の状態でないなら
      llSetRot(llEuler2Rot(<0.0, 0.0, 0.0> * DEG_TO_RAD));   // 元へ戻す
      normal = TRUE;    // 変数normalに通常の状態であることを記す
    }
  }
}



と、まぁこんな感じです。
第4回までに比べるとボリュームたっぷりで消化不良を起こしてしまう
かもしれません。しかし、そこは気合で乗り切ってくださいw

それでは今回はこの辺で終いです。
ではでは~



同じカテゴリー(超初心者用 スクリプト講座)の記事画像
第10回 スクリプト講座 ポーズボールを作ろう(2)
第10回 スクリプト講座 ポーズボールを作ろう(1)
初心者用 スクリプト講座 再開します
第9回 超初心者用スクリプト講座 タイマーを使おう
第8回 超初心者用スクリプト講座 stateを使おう
第6回 超初心者用スクリプト講座 ステートエントリー?
同じカテゴリー(超初心者用 スクリプト講座)の記事
 第10回 スクリプト講座 ポーズボールを作ろう(2) (2008-03-21 01:20)
 第10回 スクリプト講座 ポーズボールを作ろう(1) (2008-03-15 04:26)
 初心者用 スクリプト講座 再開します (2008-03-11 14:08)
 第9回 超初心者用スクリプト講座 タイマーを使おう (2007-07-05 22:25)
 第8回 超初心者用スクリプト講座 stateを使おう (2007-07-03 15:23)
 第7回 超初心者用スクリプト講座 出したら実行する (2007-06-30 16:22)

 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。