イベント発生でループから抜ける方法

Gonzo

2008年10月21日 22:50


ものすごく基本的なことなのかもしれませんが、教えてください。

ループでなにか処理をしている状態でlistenやtouchなどのイベントでループから抜ける方法がわからなくて困っています。

実験的に以下のようなスクリプトを組んでうまくいきませんでした。

integer hdl;
default{
state_entry(){
hdl = llListen(0,"",NULL_KEY,"");
integer i;
while(TRUE){
llOwnerSay((string)i);
llSleep(1);
i++;
}

}
listen(integer ch,string name,key id,string mes){
if (mes == "stop"){
llListenRemove(hdl);
llOwnerSay("STOP");
}
}
}


whileの無限ループに対して、listen イベントが発生したら、割り込み処理されると思ったのですが、LSLはそういうふうには動かないようですね。

ループ処理をしながら、イベントでループから抜けるには、どのような書き方をすればいいのでしょうか。
アドバイスをいただけると幸いです。
スクリプト関連