Template:Needs Translation/
函数名
|
Function: llSetTimerEvent( float sec );
|
参数:
•浮点秒–任何正非零值启用,零(0.0)禁用。
|
返回值:使计时器事件最多每秒触发一次。传入0.0将停止进一步的计时器事件。
|
注意事项
|
计时器事件之间的时间间隔可能更长,这是由于:
时间膨胀-有关详细信息,请参见llGetRegionTimeScansion。
默认事件延迟-每秒只能触发这么多事件。
事件执行-如果事件的执行时间过长。
计时器在状态更改期间保持不变,但在重置脚本时会被移除。因此,如果您更改为具有timer()事件的状态,并且计时器仍在运行,则它将以新状态激发。
设置一个新的计时器将取代旧的计时器并重置计时器时钟。
如果以小于秒的间隔重复调用此函数,则计时器事件将永远不会触发。
计时器事件不是中断,它不会暂停当前正在运行的事件的执行以执行计时器。当前事件必须在计时器执行之前完成执行。
|
示例
|
示例1
// default of counter is 0 upon script load
integer counter;
float gap = 2.0;
default
{
state_entry()
{
llSetTimerEvent(gap);
}
touch_start(integer total_number)
{
llSay(0, "The timer stops.");
llSetTimerEvent(0.0);
counter = 0;
}
timer()
{
++counter;
llSay(0,
(string)counter+" ticks have passed in " + (string)llGetTime()
+ " script seconds.\nEstimated elapsed time: " + (string)(counter * gap));
}
}
// random period in between (+15.0, +30.0]
// which means the resulting float could be 30.0 but not 15.0
llSetTimerEvent( 30.0 - llFrand(15.0) );
// same results for:
// llSetTimerEvent( 30.0 + llFrand(-15.0) );
// The timer event will never fire.
default
{
state_entry()
{
llSetTimerEvent(5.0);
// Sensor every 2.5 seconds
llSensorRepeat("", NULL_KEY, FALSE, 0.0, 0.0, 2.5);
}
no_sensor()
{
llSetTimerEvent(5.0);
}
timer()
{
llSay(0, "I will never happen.");
llSay(0, "Well, unless llSensorRepeat() magically finds something,"+
"or maybe there's 2.5+ seconds of lag and the timer()"+
"event queues.");
}
}
|