ソラマメブログ

2008年12月17日

オブジェクトのコンテンツに自分自身を入れて再帰Rezしたい

オブジェクトのコンテンツに自分自身を入れて、そのコンテンツ内の自分をRez。Rezされたオブジェクトが、またコンテンツ内の自分をRezというのをやりたかったんですが・・・。

とりあえず、Rezするスクリプトを作成

default
{
touch_start(integer total_number)
{
llRezObject("Object",
llGetPos() + <0.0, 0.0, 1.5>,
ZERO_VECTOR,
ZERO_ROTATION,
0);
}
}


コンテンツにRez用スクリプトと、自分自身を入れる。
コンテンツ

タッチ連打、あれ・・・。2つめでRezが止まってしまいました。
再帰失敗

実は2つめのObjectには、コンテンツにスクリプトしか入ってないのです。これは絶対不可避な問題で、最初の1つ目には自分を入れれないからです。たとえば、下の1つ目のObjectを持ち物に入れて、それを2つ目のオブジェクトの代わりに使っても、今度は3つ目で同じように止まってしまいます。100回入れ直せば100回Rezできると思いますが、無限にRezさせるのはできません(多分)。

そこで考え方を変えて、Rez後にObjectを渡してす方法を試してみました。これなら煩わしい下準備もなく無限にRez可能になるはず!

スクリプトはこちら。

default
{
touch_start(integer total_number)
{
llRezObject("Object",
llGetPos() + <0.0, 0.0, 1.5>,
ZERO_VECTOR,
ZERO_ROTATION,
0);
}

// Rezが終わった後に呼ばれるイベント
object_rez(key id)
{
// idにRezしたkeyが入ってくるのでObjectを渡す
llGiveInventory(id, "Object");
}
}


で、タッチ連打~。成功したようです(・∀・)
再帰成功


タグ :LSLTips

同じカテゴリー(LSL)の記事画像
Babbage Linden さんが来ました
LSLCon2008 開幕
LSL-Editorでユーザ定義変数も補完する
ホーミング弾の作り方
パーティクル小ネタ
物理オブジェクトの回転を防ぐ
同じカテゴリー(LSL)の記事
 LSLのC#実装は凍結らしいです (2010-07-02 03:23)
 LSLに導入されるC#ってバージョン1.0の予定なの? (2010-06-27 14:26)
 Eclipse+VrapperでのLSL開発 (2010-02-20 22:55)
 Web連携するときのオブジェクトの識別子 (2009-08-15 17:55)
 インワールドからWebサーバへポーリング (2009-04-28 23:50)
 Babbage Linden さんが来ました (2008-10-25 01:17)

Posted by sabro at 01:55│Comments(6)LSL
この記事へのトラックバック
さぶろさんの記事に触発されてフラクタルの木を作ってみました。integer me=1;float scale=1.0;float scale1=0.866;float scale2=0.5;float th1=-0.524;float th2=1.047;rez(){ llRezObject( "branch", llGetPos()+ ...
フラクタルの木の下で【ゴンタのLSL覚え書きブログ】at 2008年12月28日 07:02
一度気になったら問題が解決するまで頭から離れない性格なので。。で、さぶろクリエイトさんのブログでヒントを貰ったので。。というか殆どそのまんまのスクリプトでアンチリターンが...
続・アンチリターン【猫玉重工】at 2009年02月02日 05:45
この記事へのコメント
はじめまして。
私も10回くらいコピー、保存をしてましたが、なるほど!
こういうやり方があるんですね。
参考になりました!
Posted by Whitfield-In-WorldWhitfield-In-World at 2008年12月17日 11:03
ん~ この原理・・・
アンチリターンスクリプトと同かな?w
あれです、リターンされちゃう前に自己rezして
いくらでも居座るかんじのやつです(確かw)
Posted by NIT Dinzeo at 2008年12月17日 12:50
>Whitfield-In-Worldさん
こんにちは~。ブログいつも拝見してます^^
とにかく楽をしたくて、この方法を考えてみましたw
参考になったならうれしいです。

>NIT Dinzeoさん
多分同じような仕組みなんでしょうねー( ̄∇  ̄ )
TempプリムをRezしなおして、
プリム数を消費しない家具なんかもありますよね。
Posted by sabrosabro at 2008年12月17日 23:34
う~ん。よく考えたら
TempプリムをRezする家具は
Tempじゃない代表のオブジェクトが
延々とTempプリムをRezしまくる感じだから
今回のとはちがうか ・・・。

でも、Tempプリムが再帰的にTempプリムをRezしていくという
夢の消費0プリム家具なんてのも作れるのかな?
Posted by sabrosabro at 2008年12月18日 01:12
はじめまして、トラックバック辿って参りました。
気づいてませんでしたスミマセン^^;

こういう方法もあるんですね~
llGiveInventoryは気づきませんでした。
この方法でのアンチリターンならgoo fenceに引っかか
らなければ上手くいきそうですね。。
Posted by YUKIKOYUKIKO at 2009年02月01日 12:31
>YUKIKOさん
おー気づかれてなかったんですね。
無視されてるのかと思ってちょっとヘコんでたのは秘密ですw

そういえば、goo fenceがありましたねー。
goo fenceには注意せねば( ̄ー ̄)キリッ
↑(goo fenceの事象を忘れてしまっていたのでググった人)
Posted by sabrosabro at 2009年02月01日 16:37
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。