查看“LlSensorRepeat”的源代码
←
LlSensorRepeat
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
{{LSL Header|ml=*}}{{LSLC|Keywords}}{{LSLC|Flow Control}}{{LSLC|}} {{函数详情 |函数名 = 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 <pre> //作者: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; } } } } </pre> <pre> //作者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已经在列表中了 } } } </pre> |相关函数= [[llSensor]] - 运行传感器一次 [[llSensorRemove]] - 停止llSensorRepeat计时器 [[llOverMyLand]] - 所有者的土地会发生什么 |相关事件= [[sensor]] - 当传感器探测到某物时触发 [[no_sensor]] - 当传感器探测不到任何东西时触发 }} 附录:(表格) {| class="wikitable" border="1" |- ! colspan="2" | 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. | 有任何脚本的对象,它现在在模拟器中做任何事情。 |}
该页面使用的模板:
模板:LSL Header
(
查看源代码
)
模板:LSLC
(
查看源代码
)
模板:LSLGC
(
查看源代码
)
模板:Multi-lang
(
查看源代码
)
模板:函数详情
(
查看源代码
)
返回至
LlSensorRepeat
。
导航菜单
个人工具
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
网站首页
知识百科
编辑帮助
最近更改
工具
链入页面
相关更改
特殊页面
页面信息