PRIM MATERIAL/ja

From Second Life Wiki
< PRIM MATERIAL
Revision as of 16:33, 10 September 2008 by EJ Hirano (Talk | contribs)

Jump to: navigation, search

解説

定数: integer PRIM_MATERIAL = 2;

integer 定数 PRIM_MATERIAL の値は 2 です。

プリム素材を設定します。素材は質量には作用しませんが、抵抗、弾み(弾力)そして衝突音に作用します。33°の木の傾斜で、例のスクリプトは以下の結果を下回って発生します。

傾斜を流下した最大速度と距離の表の詳細
速度 (m/s) 距離 (m)
0.453181 0.361655
5.475444 10.211180
ガラス 6.483150 11.678304
2.154549 9.433724
0.351543 0.188043
プラスチック 4.502428 9.590952
ゴム 0.374964 0.187106

llSetPrimitiveParams

[ PRIM_MATERIAL, integer material ]
• integer material PRIM_MATERIAL_* フラグ

llSetPrimitiveParamsllSetLinkPrimitiveParamsを実行する時に用いられます。

llGetPrimitiveParams

llGetPrimitiveParams([ PRIM_MATERIAL ]);

list [ integer material ]を返します。

• integer material PRIM_MATERIAL_* フラグ

関連記事

定数

素材 フラグ 説明
PRIM_MATERIAL_STONE 0 石材
PRIM_MATERIAL_METAL 1 金属
PRIM_MATERIAL_GLASS 2 ガラス
PRIM_MATERIAL_WOOD 3 木材
PRIM_MATERIAL_FLESH 4
PRIM_MATERIAL_PLASTIC 5 プラスチック
PRIM_MATERIAL_RUBBER 6 ゴム
PRIM_MATERIAL_LIGHT 7 光, 廃止済み: [ PRIM_FULLBRIGHT, ALL_SIDES, TRUE ] と同じように見えます

関数

•  llSetPrimitiveParams
•  llSetLinkPrimitiveParams
•  llGetPrimitiveParams

イベント

•  changed

サンプル

<lsl>// © 2008 by Karzita Zabaleta // Author of Scripting Your World, Wiley, October 2008.

list gMaterialTypes = [

 "STONE",
 "METAL",
 "GLASS",
 "WOOD",
 "FLESH",
 "PLASTIC",
 "RUBBER"

];

vector gHomePosition; rotation gHomeRotation; integer gWaitCount = 0; float gMaxVelMag; integer gPrimMaterial;

moveTo(vector origin, vector destination) {

   float dist = llVecDist(origin, destination);
   integer passes = llCeil( llLog(dist/10.0) / llLog(2.0) );
   integer i;
   list params = [PRIM_POSITION, destination];
   for (i=0; i<passes; i++) {
       params = (params=[]) + params + params;
   }
   // actually move the prim, now
   llSetPrimitiveParams(params);

}

returnHome() {

   llSetStatus(STATUS_PHYSICS, FALSE);
   moveTo(llGetPos(),gHomePosition);
   llSetTimerEvent(0);
   llSetRot(gHomeRotation);

}

calculate_velocity() {

   float velMag = llVecMag(llGetVel());
   if (velMag > gMaxVelMag) {
       gMaxVelMag = velMag;
   }

}

default {

   state_entry() {
       gHomePosition = llGetPos();
       gHomeRotation = llGetRot();
   }
   on_rez(integer _n) {
       llResetScript();
   }
   touch_start(integer n) {
       gMaxVelMag = 0;
       llSetPrimitiveParams([PRIM_MATERIAL, gPrimMaterial]);
       llSetStatus(STATUS_PHYSICS,TRUE);
       llSetTimerEvent(0.1);
       llResetTime();
       gWaitCount=0;
       gPrimMaterial++;
       if (gPrimMaterial == 7 ) gPrimMaterial = 0;
   }
   timer() {
       calculate_velocity();
       gWaitCount++;
       if (gWaitCount > 100) { // 10 seconds
           string type = llList2String( gMaterialTypes, gPrimMaterial-1 );
           llOwnerSay(type+" reached maximum velocity of "+(string)gMaxVelMag+
                      " and traveled "+(string)llVecDist(llGetPos(), gHomePosition)+" meters.");
           returnHome();
       }
   }

}</lsl>

特記事項

この翻訳は 原文 と比べて古いですか?間違いがありますか?読みにくいですか?みんなで 修正 していきましょう! (手順はこちら)