2009年06月23日

ALL_SIDES じゃなくて…

基本的なことでスミマセン。
複数の指定したプリムの面の色を変えたいのですけど、どう指定すればよいかわかりません…。
面の番号は 0と2です。

llSetColor(<0, 1, 1>, ALL_SIDES);

ALL_SIDES を0と2で指定したいのですけど、うまくできません。
一面だけならできるのですけど、複数は無理なのでしょうか?
よろしくお願いします。


同じカテゴリー(スクリプト関連)の記事画像
オブジェクトのリンクとタッチで開く扉
自動チャットを止めたい
テレポートするとアニメーションが解除される
同じカテゴリー(スクリプト関連)の記事
 テクスチェンジのHUDについて (2015-07-01 04:51)
 モール用のプリムカウンターを探しています (2014-11-29 20:09)
 連続するアニメーションの処理 (2014-08-24 03:23)
 オブジェクトの上にフローティングテキストを出す。 (2014-08-22 16:46)
 チャットログの盗聴について (2014-02-03 03:43)
 椅子に座った後で位置調整できるスクリプト (2013-03-24 16:37)

Posted by pikopino  at 17:15 │Comments(4)スクリプト関連

この記事へのコメント
①案 同じ関数を繰り返す。
llSetColor(<0, 1, 1>, 0);
llSetColor(<0, 1, 1>, 2);

②案 llSetPrimitiveParamsを使う
関数の詳細は
http://wiki.secondlife.com/wiki/LlSetPrimitiveParams/ja
llSetColorは遅延なしですがllSetPrimitiveParamsは0.2秒の遅延があります。


vector COLOR_ALL = < 0.0, 0.0, 0.0>;
vector COLOR_0 = < 0.0, 1.0, 1.0>;
vector COLOR_2 = < 0.0, 0.0, 1.0>;

llSetPrimitiveParams( [
PRIM_COLOR, ALL_SIDES, COLOR_ALL, 1.0,
PRIM_COLOR, 0 , COLOR_0, 1.0 , // face 0
PRIM_COLOR, 2 , COLOR_2, 1.0 // face 2
] );
Posted by pao at 2009年06月23日 18:06
普通に

llSetColor(<0, 1, 1>, 0);
llSetColor(<0, 1, 1>, 2);

と、連続で記述すれば出来ると思いますが・・・?
どうでしょうか?
Posted by Masaki Axel at 2009年06月23日 22:21
2面だけを変更するなら、他の方が言っている通り繰り返すだけでOKだと思います。記述も短く済みます。

llSetColor(<0, 1, 1>, 0);
llSetColor(<0, 1, 1>, 2);

他には、変更する面や色が変わる場合ですがユーザー関数にする方法もありますよ。

set_color(vector color,list face){
integer i;
for(i=0;i<llGetListLength(face);i++){
llSetColor(color,llLIst2Integer(face,i);
}
}

これで、実行したい時は下のように指定すればOKです。

set_color(<0, 1, 1>, [0,2]);

※単純に毎回同じ面を変更するならば、最初に書いた方法(2回繰り返して記述)がお勧めです。
後から書いた方法は、面の数などが変わる場合に便利かと思います。
Posted by natsu at 2009年06月24日 11:34
コメントありがとうございます。
単純に2面分を記述すればよかったのですね!
思いつきませんでした……
みなさま、ありがとうございました!!
Posted by pikopino at 2009年06月24日 14:34
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。