LlSensorRepeat

来自人工智能助力教育知识百科
Mkx讨论 | 贡献2020年8月20日 (四) 02:47的版本 (创建页面,内容为“{{LSL Header|ml=*}}{{LSLC|Keywords}}{{LSLC|Flow Control}}{{LSLC|}} {{函数详情 |函数名 = Function: llSensorRepeat( string name, key id, integer type, float r…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索

Template:Needs Translation/


函数名
Function: llSensorRepeat( string name, key id, integer type, float range, float arc, float rate );
参数:• string name – 对象或角色名称!

• key id – group, avatar or object UUID

• integer type – mask (AGENT_BY_LEGACY_NAME, AGENT_BY_USERNAME, ACTIVE, PASSIVE, and/or SCRIPTED)

• float range – 射程以米为单位[0.0,96.0]

• float arc – 基本物体局部x轴与可探测物体之间的最大角度,距离[0.0,PI]

• float rate – 一个sensor/no_sensor排队的频率。

返回值:对名称和id执行一次扫描,扫描类型在前向向量的距离米和弧弧度内,并在每个速率秒内重复。直到速率秒过后,它才执行第一次扫描。


如果名称、id和/或类型为空或0,则忽略它们。

如果id是无效的键或NULL_KEY,则将其视为空。

根据所使用的代理*标志决定名称的格式要求

注意事项
当搜索一个角色,但不是通过名字,它无关紧要的代理标志使用。

传感器事件的重复受到 time dilation(滞后)的不利影响。

放置在附件根部prim的传感器将使用化身面对的方向作为它们的向前矢量。在mouselook中,这意味着它会在化身所看的任何地方,而在mouselook之外,这意味着化身指向的任何方向。这并不包括化身的头指向哪里,或者化身正在做什么动画,只是如果你向前走,化身将移动的方向。无论物体附着在哪里,情况都是如此。

放置在附着物根prim以外的prim中的传感器,其正向方向将相对于根prim的正向方向偏移,例如,放置在prim中的传感器,如果其+X方向是根的反向,则传感器将向后看。

只有最近的传感器事件被排队。之前的传感器事件被替换。

重复传感器不能在状态更改时持续存在。

llSensorRepeat偶尔可以检测出它的指定范围外,每隔几个周期,当使用接近sim边界。定时器中的llSensor则不是。

每个脚本只能激活一个或零个llSensorRepeats。如果在没有调用llSensorRemove的情况下第二次调用llSensorRepeat,第一个llSensorRepeat将失效,第二个llSensorRepeat将替换它

示例
示例1
//作者:Steamy Latte。
//每30秒扫描10米以内的游客。
//当对象所有者在范围内时,向其报告新的访问者。
 
string AllAgents;
 
default
{
    state_entry()
    {
        // arc=PI 是一个球体,你可以在物体面对的方向上看得更细一些,有/2,/4等等。
      //为了避免滞后,不要重复太多。
        llSensorRepeat("", "", AGENT_BY_LEGACY_NAME, 10.0, PI, 30.0);
    }
    sensor(integer num_detected)
    {
        string thisAgent;
        integer agentNum;
        for (agentNum=0; agentNum<num_detected; agentNum++)
        {
            thisAgent = llDetectedName(agentNum);
            if (llDetectedKey(agentNum) == llGetOwner())
            {
                if (AllAgents != "")
                {
                    llOwnerSay("We've had the following visitors:" + AllAgents);
                    AllAgents = "";
                }
            }
            else if (llSubStringIndex(AllAgents+"\n", "\n"+thisAgent+"\n") < 0)
            {
                AllAgents = AllAgents + "\n" + thisAgent;
            }
        }
    }
}
//作者Evans Love。
//(通过Void Singer限制最近的200个名称,以防止栈/堆冲突+清理)
//持续扫描10米以内的访问者,并向对象所有者报告新的访问者。
//-------------------------------------------------------------------------------------
 
integer RESPONSE_CHANNEL = -100;
float   SCAN_RANGE       = 10.0;
float   SCAN_INTERVAL    = 20.0;
list    VISITOR_LIST;
 
default
{
    state_entry()
    {
        llSensorRepeat("", NULL_KEY, AGENT_BY_LEGACY_NAME, SCAN_RANGE, PI, SCAN_INTERVAL);
    }
 
    sensor(integer number_detected)
    {
        integer agent_number;
 
//遍历所有检测到的代理
        for (; agent_number < number_detected; agent_number++)
        {
            string  this_agent_name = llDetectedName(agent_number);
            key     this_agent_key  = llDetectedKey(agent_number);
 
//如果在列表中没有找到代理
            if (llListFindList(VISITOR_LIST, [this_agent_name]) == -1)
            {
//加上她/他,使名单保持最后200人
                VISITOR_LIST = [this_agent_name] + llList2List(VISITOR_LIST, 0, 198);
 
                llDialog(this_agent_key, "Welcome!", ["Ok"], RESPONSE_CHANNEL);
 
                llOwnerSay(this_agent_name);
            }
// else agent已经在列表中了
        }
 
    }
}
相关函数
llSensor - 运行传感器一次

llSensorRemove - 停止llSensorRepeat计时器

llOverMyLand - 所有者的土地会发生什么

相关事件
sensor - 当传感器探测到某物时触发

no_sensor - 当传感器探测不到任何东西时触发

附录:(表格)

type Flag Mask Description (llDetectedType) Description (llSensor and llSensorRepeat() mask)
AGENT_BY_LEGACY_NAME 0x1 Agents 这用于按遗留名称查找代理。
AGENT 0x1 Agents 它还用于根据遗留名称查找代理,并且在功能上与AGENT_BY_LEGACY_NAME相同
AGENT_BY_USERNAME 0x10 Reserved 它用于按用户名查找代理。
ACTIVE 0x2 Physical tasks. (Physical objects & agents) 正在移动的物理对象或包含活动脚本的对象。因此,它现在正在使用SL服务器资源。
PASSIVE 0x4 Non-physical objects. 非脚本或脚本是不活动的和非物理的,如果是物理的,是不移动的。因此,它现在不使用SL服务器资源。
SCRIPTED 0x8 Objects containing any active script. 有任何脚本的对象,它现在在模拟器中做任何事情。