Tonyu2には「待機可能モード」と「待機不能モード」という2つの動作モードがあります.
待機可能モードで動作している間は,updateなどの,途中で動作を中断する(つまり,プログラムの動作を待機状態にする)メソッド(これを「待機系メソッド」と呼びます)が呼ばれたときに,一旦処理を中断し,描画や入力状態の更新などの処理を行います.
あるメソッドが待機可能モードで動作する条件として,次のものがあります。
メソッド名(引数...);
戻り値=メソッド名(引数...);
var 戻り値=メソッド名(引数...);
let 戻り値=メソッド名(引数...);
super.メソッド名(引数...);
戻り値=super.メソッド名(引数...);
return メソッド名(引数...);
上で述べた条件にあてはまらない場合,「待機不能モード」で動作します. 待機不能モードでは,待機系メソッドが呼ばれても,途中で動作を中断しません.例えば,待機不能モード中にupdateメソッドが呼ばれても,待機動作を行いません.
待機可能モードでは,待機不能モードより動作が遅くなることがあります.そこで,待機系メソッドが呼び出されないことが明らかな場合,必ず待機不能モードで動作したほうが効率がよくなります.このようなメソッドを「待機不能メソッド」と呼びます.
待機不能メソッドは,メソッドの定義の先頭にnowait
キーワードを追加して定義します.
nowait \myNoWaitMethod(arg1,arg2) {
}
nowait
がなくても待機不能メソッドになります。待機可能モード時は_thread
という変数に現在のスレッドが格納されています。待機不能モード時はこの値はnull
です。
method1(); //待機可能モードで動作
a=method1(); //待機可能モードで動作
a=10+method1(); //待機不能モードで動作
other.method1(); //待機不能モードで動作
method2(); //待機不能モードで動作
\method1() {
for (i=0 ; i<20 ; i++) {
x++;
if (_thread) { /*待機可能モード時はここが実行される*/ }
else { /*待機不能モード時はここが実行される*/ }
update(); // 待機可能モードなら,ここで待機する
}
return x;
}
nowait \method2() {
for (i=0 ; i<20 ; i++) {
x--;
update(); // ここでは待機しない
}
}