sabro
2009年01月04日
14:48
ジェンガ、そこそこ持ってっていただいてます^^
今回は、ジェンガの仕組みをちょろっと書いてみます。
まずブロックのRezですが、ブロックの高さが1mで18段積み上げるので、地面に設置した本体から全てのブロックをRezしようとしても、llRezObjectの10m制限により、途中で生成が止まってしまいます。これに対して最初は「
オブジェクトのコンテンツに自分自身を入れて再帰Rezしたい」に書いたように、ブロックがブロックを生成する方式で対処しようと思ったのですが、結構ロジックが複雑になりそうだったので、実は別の方法を採用しています(前回の記事の内容は別の箇所で使用しています)。
10m制限があるなら、Rezする側のオブジェクトを生成に合わせて上昇させてやればよいわけです。ジェンガの開始ボタンを押すと、透明でファントムな小さなオブジェクトを生成します。そのオブジェクトはブロックを1段生成すると、1m上昇するようになってますので、無事最上段まで生成出来るわけです。
さて、一番大変だったのはブロックを追加する緑のオブジェクトです。最上段に3つ作られて、タッチするとブロックを生成します。ただし、一番最後にタッチされたものは、1段上に緑のオブジェクトを3つ生成する必要があります。
これにはSensorを利用しています。緑のオブジェクトの名前「block-adder」で、llSensor関数を呼び出して、見つからなかった場合は自分が最後のオブジェクトだと判断して、次の緑オブジェクトを生成しています。緑オブジェクトは、最初にまとめて生成できず、1段積み上げるごとにつくられるので、前回の記事の再帰Rezを使用しています。
後は、おかたづけボタンでのブロック削除ですが、これはllShoutでkillメッセージを流し、それをブロックがlistenしてllDieすることで実現しています。ちなみに、さぶろクリエイトのロゴはタッチすると
さぶろクリエイトのページをロードするようになっています。宣伝宣伝^^
だいたいこんな感じです。ジェンガはフルパーになっていてソースの確認や修正も可能なんで、詳しく知りたい方はゲットして解析してみてくださいねー。
配布場所
http://maps.secondlife.com/secondlife/Nippori/155/166/23/