◆PROCESSING 逆引きリファレンス
カテゴリー:制御系
【解説】
プログラムには、おおまかに言って、開始⇒実行⇒終了の3つの段階があります(専門的にはもっと多くの状態がありますが、このように考えても間違いではありません)。
PROCESSINGのプログラムの入り口(エントリーポイント)は
1 |
public static void main(String _args[]) {……} |
と定義されるmain関数になります。
しかし、標準エディタだけでPROCESSINGをプログラムしている人は、main() 関数を意識する事はないでしょう。
ですので、見かけ上は
1 |
public void setup() {………} |
と定義される setup() 関数から始まると考えてOKです。ここがプログラムの(見かけ上の)開始地点になります。
実行部分は
1 |
public void draw() {………} |
と定義される draw()関数で、freameRate(); で指定された間隔で自動的に繰り返し呼び出されます。
draw()関数は人間が実行結果ウィンドウを閉じない限り、永遠に繰り返し実行され続けます。この繰り返し動作を停止し、プログラムを終了するには exit(); 命令を利用します。
【構文】
exit();
【パラメータ】
なし
【戻り値】
なし
【注意】
exit() は実行された時点で直ちにプログラムを終了させるわけではなく、 draw() 関数内のコードが最後まで実行されてからプログラムを終了します。
もしも exit() が setup() 関数内で実行された場合は、setup() 関数が完了してから終了します。ここは注意ですね。
PROCESSINGはJavaをベースにした言語ですので、 System.exit() 命令も使うことが可能ですが、正規リファレンスでは System.exit() の利用は推奨されていません。
【関連記事】
第2章:ゲームの基本構造とPROCESSING
第3章:改定版-ゲームオーバ画面と仕上げ(その2)
●setup()関数内でプログラムを終了する例:
1 2 3 4 5 6 7 8 |
void setup(){ exit(); println( "ほげ "); } void draw(){ println( "はげ" ); } |
setup()が開始したら、直ぐにプログラムを終了しています(それって意味あるの?・・・という突っ込みは無しでお願いします:笑)。
ただし、exit() はsetup() 関数内のコードが最後まで実行されてからプログラムを終了します。ですので下記サンプルにあるように、コンソールに “ほげ” が表示されます。
ただし draw()関数は実行されませんので、”はげ” は表示されません。
●draw()関数内でプログラムを終了する例:
1 2 3 4 5 6 7 8 |
void setup(){ println( "ほげ "); } void draw(){ exit(); println( "はげ" ); } |
draw()関数が開始したら、直ぐにプログラムを終了しています。
ただし、exit() はdraw() 関数内のコードが最後まで実行されてからプログラムを終了するので、下記サンプルにあるように、コンソールに “ほげ” と “はげ” が表示されます。
●直ちにプログラムを終了する例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
void setup(){ iEndFlg = 0; iLoop = 0; } void draw(){ if( iEndFlg != 0 ){ exit(); } else { println( "何か実行" + iLoop ); iLoop++; } } void mousePressed() { iEndFlg = 1; } |
注意事項に書いた通り System.exit();は非推奨ですので、ちょっと工夫が必要です。
例えばマウスがクリックされたら直ちにプログラムを終了するには、上記のような感じでマウスのクリックを検知(mousePressed)した際に、終了判定フラグをONにし、それをdraw()関数内部で検査するような工夫が必要になります。
ちょっと面倒ですね(汗)。
本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。