2008年12月17日
オブジェクトのコンテンツに自分自身を入れて再帰Rezしたい
オブジェクトのコンテンツに自分自身を入れて、そのコンテンツ内の自分をRez。Rezされたオブジェクトが、またコンテンツ内の自分をRezというのをやりたかったんですが・・・。
とりあえず、Rezするスクリプトを作成
コンテンツにRez用スクリプトと、自分自身を入れる。

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

実は2つめのObjectには、コンテンツにスクリプトしか入ってないのです。これは絶対不可避な問題で、最初の1つ目には自分を入れれないからです。たとえば、下の1つ目のObjectを持ち物に入れて、それを2つ目のオブジェクトの代わりに使っても、今度は3つ目で同じように止まってしまいます。100回入れ直せば100回Rezできると思いますが、無限にRezさせるのはできません(多分)。
そこで考え方を変えて、Rez後にObjectを渡してす方法を試してみました。これなら煩わしい下準備もなく無限に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");
}
}
で、タッチ連打~。成功したようです(・∀・)

LSLのC#実装は凍結らしいです
LSLに導入されるC#ってバージョン1.0の予定なの?
Eclipse+VrapperでのLSL開発
Web連携するときのオブジェクトの識別子
インワールドからWebサーバへポーリング
Babbage Linden さんが来ました
LSLに導入されるC#ってバージョン1.0の予定なの?
Eclipse+VrapperでのLSL開発
Web連携するときのオブジェクトの識別子
インワールドからWebサーバへポーリング
Babbage Linden さんが来ました
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回くらいコピー、保存をしてましたが、なるほど!
こういうやり方があるんですね。
参考になりました!
私も10回くらいコピー、保存をしてましたが、なるほど!
こういうやり方があるんですね。
参考になりました!
Posted by Whitfield-In-World
at 2008年12月17日 11:03

ん~ この原理・・・
アンチリターンスクリプトと同かな?w
あれです、リターンされちゃう前に自己rezして
いくらでも居座るかんじのやつです(確かw)
アンチリターンスクリプトと同かな?w
あれです、リターンされちゃう前に自己rezして
いくらでも居座るかんじのやつです(確かw)
Posted by NIT Dinzeo at 2008年12月17日 12:50
>Whitfield-In-Worldさん
こんにちは~。ブログいつも拝見してます^^
とにかく楽をしたくて、この方法を考えてみましたw
参考になったならうれしいです。
>NIT Dinzeoさん
多分同じような仕組みなんでしょうねー( ̄∇  ̄ )
TempプリムをRezしなおして、
プリム数を消費しない家具なんかもありますよね。
こんにちは~。ブログいつも拝見してます^^
とにかく楽をしたくて、この方法を考えてみましたw
参考になったならうれしいです。
>NIT Dinzeoさん
多分同じような仕組みなんでしょうねー( ̄∇  ̄ )
TempプリムをRezしなおして、
プリム数を消費しない家具なんかもありますよね。
Posted by sabro
at 2008年12月17日 23:34

う~ん。よく考えたら
TempプリムをRezする家具は
Tempじゃない代表のオブジェクトが
延々とTempプリムをRezしまくる感じだから
今回のとはちがうか ・・・。
でも、Tempプリムが再帰的にTempプリムをRezしていくという
夢の消費0プリム家具なんてのも作れるのかな?
TempプリムをRezする家具は
Tempじゃない代表のオブジェクトが
延々とTempプリムをRezしまくる感じだから
今回のとはちがうか ・・・。
でも、Tempプリムが再帰的にTempプリムをRezしていくという
夢の消費0プリム家具なんてのも作れるのかな?
Posted by sabro
at 2008年12月18日 01:12

はじめまして、トラックバック辿って参りました。
気づいてませんでしたスミマセン^^;
こういう方法もあるんですね~
llGiveInventoryは気づきませんでした。
この方法でのアンチリターンならgoo fenceに引っかか
らなければ上手くいきそうですね。。
気づいてませんでしたスミマセン^^;
こういう方法もあるんですね~
llGiveInventoryは気づきませんでした。
この方法でのアンチリターンならgoo fenceに引っかか
らなければ上手くいきそうですね。。
Posted by YUKIKO
at 2009年02月01日 12:31

>YUKIKOさん
おー気づかれてなかったんですね。
無視されてるのかと思ってちょっとヘコんでたのは秘密ですw
そういえば、goo fenceがありましたねー。
goo fenceには注意せねば( ̄ー ̄)キリッ
↑(goo fenceの事象を忘れてしまっていたのでググった人)
おー気づかれてなかったんですね。
無視されてるのかと思ってちょっとヘコんでたのは秘密ですw
そういえば、goo fenceがありましたねー。
goo fenceには注意せねば( ̄ー ̄)キリッ
↑(goo fenceの事象を忘れてしまっていたのでググった人)
Posted by sabro
at 2009年02月01日 16:37
