LlDetectedTouchST/ja

From Second Life Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

要約

関数: llDetectedTouchST( integer index );

touch された点の、プリム面上の座標を vector で返します。x, y 座標はそれぞれ水平 (s), 垂直 (t) の面座標に対応します (<s, t, 0.0>)。それぞれは [0.0, 1.0] の範囲にあります。 面座標を取得できなかった場合は TOUCH_INVALID_TEXCOORD が返されます。詳細は 警告 を参照してください。

• integer index 探知情報の番号

index には 負のインデックス を使用できません。 touch 系イベントでのみ有効です。touch されたプリムとイベントが処理されるプリムは別かもしれません。これは llDetectedLinkNumber でチェックできます。同様に、どの面が touch されたかは llDetectedTouchFace でチェックできます。

警告

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

サンプル

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

}
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 点をテクスチャ座標として設定する
        }
    }
 
}
// 指定した列数・行数 (以下では 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);
        }
    }
}

関連項目

特記事項

経緯

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