Difference between revisions of "No sensor/ja"

From Second Life Wiki
Jump to navigation Jump to search
(New page: {{LSL_Event/ja|event_id=14|event_delay|event=no_sensor |event_desc={{LSLG/ja|llSensor}}ライブラリ関数呼び出しの結果です。 |constants|spec|caveats|examples= <lsl> //List a...)
 
m
Line 1: Line 1:
{{LSL_Event/ja|event_id=14|event_delay|event=no_sensor
{{Issues/SVC-2409/ja}}{{LSL_Event/ja
|event_desc={{LSLG/ja|llSensor}}ライブラリ関数呼び出しの結果です。
|event_id=14
|constants|spec|caveats|examples=
|event_delay
<lsl>
|event=no_sensor
//List all avatars in range.
|event_desc={{LSLG/ja|llSensor}} や {{LSLG/ja|llSensorRepeat}} の呼び出しで発生します。
|constants
|spec
|caveats=
*sensor/no_sensor は必ずしも最善なやり方ではありません:
**何かが範囲内/範囲外に入っているかを調べるのは、やり過ぎです。このケースでは {{LSLG/ja|llGetObjectDetails}} を、 [[#Useful Snippets|便利なスペニット]] の章にあるように使用しましょう。
**アバターが地域にいるかどうかを調べるには、 {{LSLG/ja|llGetAgentSize}} を使ってみましょう。
|examples=
<lsl>//範囲内の全てのアバターをリストアップします。
default {
default {
     on_rez(integer i) {
     on_rez(integer i) {
Line 10: Line 18:
     sensor(integer num) {
     sensor(integer num) {
           integer i = 0;
           integer i = 0;
           while (i < num) {
           do {
               llOwnerSay(llDetectedName(i) + " is " + (string)llVecDist(llGetPos(), llDetectedPos(i)) + "m away.");
               llOwnerSay(llDetectedName(i) + " is " + (string)llVecDist(llGetPos(), llDetectedPos(i)) + "m away.");
              i++;
          }while(++i < num);
          }
     }
     }
     no_sensor() {
     no_sensor() {
           llOwnerSay("No avatars in range.");
           llOwnerSay("No avatars in range.");
     }
     }
}
}</lsl>
</lsl>


|helpers
|helpers=
|also_header|also_events
<lsl>//ユーザが範囲内にいないことを発見する他のやり方です。
|also_functions=*{{LSLG/ja|llSensor}}
//センサーをまったく使っていないので、上の警告はあてはまりません。
*{{LSLG/ja|llSensorRepeat}}|also_articles|also_footer
 
|notes|mode|deprecated
integer InRange(key uuid, float distance)
{
    list data = llGetObjectDetails(uuid, [OBJECT_POS]);
    if(data == [])
        return 0;
    return llVecDist(llList2Vector(data, 0), llGetPos()) <= dist;
}</lsl>
|also_header
|also_events
|also_functions={{LSL DefineRow||{{LSLG/ja|llSensor}}}}
{{LSL DefineRow||{{LSLG/ja|llSensorRepeat}}}}
|also_articles
|also_footer
|notes
|mode
|deprecated
|cat1=Sensor
|cat1=Sensor
|cat2
|cat2
|cat3
|cat3
|cat4}}
|cat4
}}

Revision as of 13:41, 20 May 2010

説明

! イベント: no_sensor( ){ ; }

llSensorllSensorRepeat の呼び出しで発生します。


警告

  • スクリプトに sensor イベントがないと、 no_sensor が発生しません。 ~ SVC-2409
    • 空の sensor が条件を満たしているのに、 no_sensor が発生します。
  • sensor/no_sensor は必ずしも最善なやり方ではありません:
    • 何かが範囲内/範囲外に入っているかを調べるのは、やり過ぎです。このケースでは llGetObjectDetails を、 便利なスペニット の章にあるように使用しましょう。
    • アバターが地域にいるかどうかを調べるには、 llGetAgentSize を使ってみましょう。

サンプル

<lsl>//範囲内の全てのアバターをリストアップします。 default {

    on_rez(integer i) {
         llSensor("", "", AGENT, 100000, 10000);
    }
    sensor(integer num) {
         integer i = 0;
         do {
              llOwnerSay(llDetectedName(i) + " is " + (string)llVecDist(llGetPos(), llDetectedPos(i)) + "m away.");
         }while(++i < num);
    }
    no_sensor() {
         llOwnerSay("No avatars in range.");
    }

}</lsl>

便利なスニペット

<lsl>//ユーザが範囲内にいないことを発見する他のやり方です。 //センサーをまったく使っていないので、上の警告はあてはまりません。

integer InRange(key uuid, float distance) {

   list data = llGetObjectDetails(uuid, [OBJECT_POS]);
   if(data == [])
       return 0;
   return llVecDist(llList2Vector(data, 0), llGetPos()) <= dist;

}</lsl>

参考情報

関数

•  llSensor
•  llSensorRepeat

特記事項

議論

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