Иногда появляются задачи, которые требуют максимально быстрого таймера. Первое, что приходит в голову сделать что нибудь типа:
или вообще 0.000001 :) но это уже не существенно. Однако есть таймер и еще более быстрый, наверно самый быстрый вообще. Его использование не явно. Можно сказать что это полу-хак. Работает он на так называемых таргетах, как показала практика этот псевдо-таймер самый быстрый. К примеру:
Еще полезно когда надо использовать несколько таймеров в скрипте, к примеру один максимально быстрый, другой обычный.
Остановить его очень просто:
llSetTimerEvent(0.01);
или вообще 0.000001 :) но это уже не существенно. Однако есть таймер и еще более быстрый, наверно самый быстрый вообще. Его использование не явно. Можно сказать что это полу-хак. Работает он на так называемых таргетах, как показала практика этот псевдо-таймер самый быстрый. К примеру:
integer test;
default
{
state_entry()
{
//устанавливаем недостижимую цель
test=llTarget(<0,0,0>,0.1);
}
not_at_target()
{
//а вот тут наш код типа_таймер
//это событие вызывается всякий раз пока не в заданных координатах
//то есть постоянно и очень часто
}
}
Еще полезно когда надо использовать несколько таймеров в скрипте, к примеру один максимально быстрый, другой обычный.
Остановить его очень просто:
llTargetRemove(test);









Мало того. Долго-долго извращались, пробовали различные евенты... быстрее, чем 0.04 работает только while(1), гг
float old=0; default { state_entry(){ llSetTimerEvent(0.0001); } timer(){ float new=llGetTime(); llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_TEXT,(string)(new-old),<1,1,1>,1]); old=new; } }float old=0; integer test; default { state_entry(){ test=llTarget(<0,0,0>,0.1); } not_at_target(){ float new=llGetTime(); llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_TEXT,(string)(new-old),<1,1,1>,1]); old=new; } }Зато, если писать not_at_target() - ваш код будет выглядеть странно. Можно сойти за шамана.
Если внимательно присмотреться, то предложенный "хак" работает даже немножко медленнее.
Если хочется экстрима и наглядности:
rotation a; default { state_entry() { a=llEuler2Rot(<0,0,0.001>); llSetTimerEvent(0.0001); } timer(){ llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_ROTATION,llGetRot()*a]); } }rotation a; integer test; default { state_entry() { a=llEuler2Rot(<0,0,0.001>); test=llTarget(<0,0,0>,0.1); } not_at_target(){ llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_ROTATION,llGetRot()*a]); } }rotation a; default { state_entry() { a=llEuler2Rot(<0,0,0.001>); while(1)llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_ROTATION,llGetRot()*a]); } }