touch
touch(integer num_detected)
エージェントがスクリプトが入ったオブジェクトをクリックし続けてる間、この
イベントが発生し続けます。
タッチするエージェントの数はnum_detected引数を通じてスクリプトに伝わります。
それらのオブジェクトに関する情報はllDetected*機能で集められるかもしれません。
ラグ/パフォーマンス状況報告:
touch_start()のイベントが、事実上オブジェクトにタッチする必要のあるすべての場合に発生が想定されることに気づいてください。
Touch()イベントを使うべき唯一の場合はあなたが1秒間に数回のタッチの更新を受信することをオブジェクトが必要とするときだけです。
さらに、オブジェクトが触れられることをやめた後も、touch()イベントにタッチを報告させるバグが最近発見されました。
それがFIXされたという話はまだありません。
これらの理由を考えあわせると、もし絶対に必要でなければ、touch_start()イベントが()touch()イベントよりもはるかに推奨されます。
イベント |
引き金となるアクション |
複数回の検出 |
touch() |
エージェントがオブジェクトをクリックしてる間 |
YES |
touch_start() |
エージェントがオブジェクトをクリックし始めた時 |
NO |
touch_end() |
エージェントがオブジェクトをクリックをやめた時 |
NO |
注意:
「タッチ」とは「クリックし」を意味していて「接触(衝突)」ではありません。
衝突に対処するには、
collision(),
collision_start(),
collision_end()イベントを使用してください。
touch()touch_start()あるいはtouch_end()のイベントを含んでいるスクリプトは、それらがそれをクリックすることを意味する場合にオブジェクトをドラッグするユーザによって引き起こされた「プリムドリフト」を受け付けるかもしれません。
これを回避するためには、グラブを防止するためにllSetStatus(STATUS_BLOCK_GRAB、TRUE)を使用するか、以下を見てください。
マウスボタンが下がっている間に、スクリプトがステートを変更し新しいステートが3つタッチイベントのうちのどのイベントハンドラーも持たない場合、この種のドリフトが起こります。
また、これらのステートに何もしないハンドラ(つまり空白のハンドラ)を加えると、ユーザがオブジェクトのドラッグ操作を許容している間、問題は避けられます。
上のテーブルの「いいえ」は不正確です。シングルマウスクリックで あなたのスクリプトは複数のtouch_startイベントかtouch_endイベントを得ることができます。
不思議なことに!この問題はいくつかのマウスで起こりますが、他のものでは起きないものもあり、、たぶんマウスドライバーに関係しています。
touch_start()イベントでステーツの変更を要求すると、新しいステーツはアクティブになったときに、まだあなたの指がマウスボタン上にあれば、新しい状態のtouch_start()のイベントを引き起こしてしまいます。
ステーツ変更を引き起こすためにtouch_end()イベント使用することにより、これを回避してください。
llSetTouchText()関数、llPassTouches()関数も参照してください。
最終更新:2008年10月01日 10:03