LlDetectedTouchST/ja

From Second Life Wiki
Jump to navigation Jump to search

要約

関数: 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 系イベントでない。

サンプル

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の関連した項目が参考になるかもしれません。