2012/06/09

サイズ変更のデモも


デモ飛行船は、サイズ変更のデモもできます。
乗物の飛行船は、もともと最初に作ったアバター用の小さな飛行船を拡大したものなのです。
タッチでメニューが出ますので、大きさをいろいろ変えてみてください。

よく服のパーツなんかについてるサイズ変更のスクリプトと同じなのですが、あれでいつも不満に思ってたのを解消しています。
というのは、「+10%」「-5%」などのボタンを何度も押していると、だんだん数字がずれてくることがあります。
たとえば、「+10%」は比率110%、「-5%」は比率95%で、次々ボタンを押すと、100%×110%×95%=104.5%となって、105%ぴったりにはなりません。

このスクリプトでは、ぴったりの数字になるよう、比率は比率で100%+10%-5%=105% のように別に計算してから、もとの大きさを基準に拡大縮小します。

サイズの記録と再設定(拡大縮小)の部分は、こんな感じです…
getParams() { // プリムのもとの位置と大きさを記録する
 Scale = llGetScale(); // 親プリムの大きさ
 Children = []; // 子プリムの位置と大きさを記録するリスト
 PrimNum = countPrims(); // リンクしているプリム数
 integer link = 2; // 最初の子プリムのリンク番号
 for ( ; link <= PrimNum; ++link) // 子プリムの数だけ記録
  Children += llGetLinkPrimitiveParams(link,[PRIM_POS_LOCAL,PRIM_SIZE]);
}
setParams( float ratio ) { // プリムの位置と大きさを設定(拡大縮小)する、ratio:比率
 llSetScale( ratio * Scale ); // 親プリムの大きさ、もとのサイズに比率をかける
 integer link = 2;
 for ( ; link <= PrimNum; ++link)
  llSetLinkPrimitiveParamsFast(link,
    [PRIM_POS_LOCAL, ratio * llList2Vector(Children,(link-2)*2),
    PRIM_SIZE, ratio * llList2Vector(Children,(link-2)*2+1)]);
}
デモを試せる築地のお店はこちら
http://slurl.com/secondlife/TSUKIJI/90/47/22/