2007年11月28日

プリムの動きをループさせるスクリプト

どうもお世話になります

本日は、プリムにA~Bの角度をループさせるスクリプトについて質問です。
(パタパタする感じ)

【現状】
------------------------------------------------------------
default {
state_entry()
{
rotation A = llGetRot();
A *=llEuler2Rot(<50,0,0>*DEG_TO_RAD);
llSetRot(A);

rotation B = llGetRot();
B *=llEuler2Rot(<-50,0,0>*DEG_TO_RAD);
llSetRot(B);

}

}
------------------------------------------------------------


動きの指定は、できたのですが、、、
これをA-Bと、ループして動かすには、あと何を足したらよいのでしょうか?
もしくわ、もっと良い書き方がありますか?



Posted by sadayuki1667  at 14:12 │Comments(4)

この記事へのコメント
ぱっとみて、コメント書き込むかしばし悩みましたが・・・
まあ、行動することはいいことかなと、書き込むことにしてみましたw

あまり凝らないで本当に最小限の変更で動かすのであれば
こんな書き方で実現できるのではないかと思います。


//------------------------------------------------------------
integer pata_pata_flag=FALSE; //patapata flag

default{
state_entry(){
llSetTimerEvent(0.5); //0.5 sec cycle timer event
}
//timer event
timer(){
if(pata_pata_flag==FALSE){
pata_pata_flag=TRUE;
rotation A = llGetRot();
A *=llEuler2Rot(<50,0,0>*DEG_TO_RAD);
llSetRot(A);
}else{
pata_pata_flag=FALSE;
rotation B = llGetRot();
B *=llEuler2Rot(<-50,0,0>*DEG_TO_RAD);
llSetRot(B);
}
}
}
//------------------------------------------------------------

0.5秒毎に回転方向が切り替わってます。
使用したのは0.5秒毎にタイマーイベントが発生する
llSetTimerEvent(0.5);  と
そのタイマーを実行する場所 timer()の追加
あとはパタパタがどちらの向きになるかを記す
pata_pata_flag が追加されています
タイマーイベントが起きるたびに pata_pata_flagが
TRUE と FALSEを行ったりきたりしながら
ぱたぱたと動くと思います。パタパタの周期を遅くしたい場合は
llSetTimerEvent(1.0); というように数値を大きくすればOKです
とりあえずトライしてみてね~ん
Posted by NIT Dinzeo at 2007年11月28日 14:32
触れ幅が+-50で固定だったらこんな感じでも動くかな
汎用性ないけどw
(未コンパイルなのでお気をつけて)

integer deg_speed=0;
rotation rot_tmp;
vector def_vec=<50,0,0>;
vector cos_vec;
default
{
state_entry()
{
deg_speed=0;
llSetTimerEvent(0.1);
}
timer()
{
rot_tmp = llGetRot();
cos_vec = def_vec*llCos(deg_speed*DEG_TO_RAD);
rot_tmp *= llEuler2Rot(cos_vec*DEG_TO_RAD);
llSetRot(rot_tmp);
deg_speed+=1; //cos deg++ speed
if(deg_speed>360)deg_speed=0; //deg limit
}
}
Posted by ぶも at 2007年11月29日 11:50
ちょっと脱線しますが、スムーズなパタパタ感を出すのであれば、llTargetOmega()を使うという手もありますね。
回転の方向をtimerイベントで定期的に入れ替えてやればOKだと思います。
Posted by asa Soyer at 2007年11月29日 14:27
あはw、このスレつづいてたんだw

じゃとりあえずチョイ書き込みで
llRotLookAt(rotation target, float strength, float damping)
という命令が実験したとき動いてる途中が見えたと記憶してます。
ガクガクと動くのがいやであればこれで・・・
書き方は
llSetRot(rotation rot) にたいして回転力とダンピングが
付いただけですので単純に置き換えて、たとえば このように
llRotLookAt(rot_tmp,1.0,0.2);
とりあえず書き換えるだけで動くはずです
今ソース出せる状態で無いので実際のソースと
検証は後の人にバトンタッチw
ではでは~
Posted by NIT Dinzeo at 2007年11月29日 18:27
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。