LlDetectedTouchST/ja

From Second Life Wiki
< LlDetectedTouchST
Revision as of 03:01, 12 April 2010 by Mako Nozaki (talk | contribs) (Undo revision 849412 by Mako Nozaki (Talk))
Jump to navigation Jump to search

要約

関数: vector llDetectedTouchST( integer index );

touch された点の、プリム面上の座標を vector で返します。

• integer index 探知情報の番号

index には 負のインデックス を使用できません。 touch 系イベントでのみ有効です。touch されたプリムとイベントが処理されるプリムは別かもしれません。これは llDetectedLinkNumber でチェックできます。同様に、どの面が touch されたかは llDetectedTouchFace でチェックできます。
x, y 座標はそれぞれ水平 (s), 垂直 (t) の面座標に対応します (<s, t, 0.0>)。それぞれは [0.0, 1.0] の範囲にあります。
面座標を取得できなかった場合は TOUCH_INVALID_TEXCOORD が返されます。詳細は 警告 を参照してください。

警告

  • index が正常なインデックス範囲を外れていても、スクリプトはエラー表示を出さずに処理を続けます。
  • 以下の場合は TOUCH_INVALID_TEXCOORD が返されます:
    • アバターのビューアが touch 面の検出に対応していない。
    • touch 点がプリムの表面から外れた。
    • touch 点を取得できないほど、touch 点が面の端に近すぎた。
    • この関数を呼び出したイベントが touch 系イベントでない。

サンプル

<lsl>default {

   touch_start(integer num_detected) {
       integer i = 0;
       for(; i < num_detected; ++i ) {
           vector touchedpos = llDetectedTouchST(i);      
           
           if (llDetectedTouchFace(i) == -1) {
               llWhisper(0, "ビューアが touch 面の検出に対応していません。");
           }
           else if ( touchedpos == TOUCH_INVALID_TEXCOORD ) {
               llWhisper(0, "touch 点を取得できませんでした。");
           }
           else {
               llWhisper(0, (string) touchedpos);
           }
       } // while ...
   } // touch_start

}</lsl> <lsl>vector touchedLoc;

default { // touch された点にクロスヘアを描く

   touch(integer num_detected) {
       integer i;
       for (i = 0; i < num_detected; i++) {
           touchedLoc = llDetectedTouchST(i); // touch された面座標
           llSetPrimitiveParams([PRIM_TEXTURE, llDetectedTouchFace(i), "5ac7995c-4c24-8b60-ae61-6a837619dc75",
                         <1.0,1.0,0.0>, touchedLoc, 180*DEG_TO_RAD]); /// touch 点をテクスチャ座標として設定する
       }
   }

} </lsl> <lsl> // 指定した列数・行数 (以下では 12x12) でテクスチャをタイル状に敷き詰めておき、 // どの格子に touch されたかを答える。

float x=12.0; float y=12.0; integer Pos;

default{

   touch_start(integer total_number){
       if (llDetectedTouchFace(0) == -1)
           llOwnerSay("old client");
       else{
           vector pos = llDetectedTouchST(0);
           Pos = ((llFloor((pos.x*10)*x)/10)*(integer)y)+llCeil(pos.y*y);
           llOwnerSay((string)Pos);
       }
   }

}

</lsl>

関連項目

特記事項

経緯

Introduced in Viewer SVN:870 r92872 Branch:Release Wednesday, 23 July 2008, Supported by Beta Server 1.24.0.93754 (Wenesday 6th August 2008), and viewer binary 1.20.15 (93532).

Search JIRA for related Issues

Signature

function vector llDetectedTouchST( integer index );
この翻訳は 原文 と比べて古いですか?間違いがありますか?読みにくいですか?みんなで 修正 していきましょう! (手順はこちら)
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。