◆PROCESSING 逆引きリファレンス
カテゴリー:制御系
実行結果ウィンドウを非表示にするには(3.X用)
【解説】
《本記事の内容は PROCESSING 3.X用です。2.X以前では利用できません》
特殊なプログラムでは、画面を非表示状態から始めたい事があります。
また何かのイベント(キーが押されたなど)で画面を非表示にしたい事もあるでしょう。
PROCESSINGでは何もしないと、かならず実行結果ウィンドウが表示される状態から始まります。実行結果ウィンドウの表示・非表示を制御するには、どうしたら良いでしょうか?。
PROCESSING3.Xでは、PApplet内にグラフィクス表示用のPSurfaceインタフェース型の変数(processing.core.PSurfaceNoneクラスのインスタンス?)を保持しています。
このインタフェース変数が持つメソッドを利用する事で、これらを実現することができます。
Psurfaceインタフェース変数は surface というグローバル変数として定義されています。またPAppletクラスのgetSurface()メソッドでも取得可能です。
実行結果ウィンドウの表示・非表示は、PSurfaceインタフェースが持つsetVisible()メソッドで制御可能です。
PROCESSINGでPSurface変数を取得する方法については「実行結果ウィンドウの位置を制御するには(3.X用)」を参照してください。
【構文】
●実行結果ウィンドウの表示・非表示を制御する
void surface . setVisible( boolean ctrl ) ;
surface:PAppletが持つPSurfaceインタフェース変数
ctrl:trueなら表示。falseなら非表示。
【注意】
実行結果ウィンドウを非表示にすると、実行結果ウィンドウを通したイベント(マウスクリックやキー入力)も受け付けなくなります。
非表示は透明化ではありませんので、注意してください。
プログラムの開始直後に実行結果ウィンドウを非表示にしたい場合は、setup()関数の中で、setVisible( false ); にします。なぜなら settings() の中ではsurface変数が利用できないからです。
が・・・setup()関数の開始早々に setVisible( false ); を実行しても、あなたのPCの処理速度が早いと、一瞬だけ実行結果ウィンドウがチラっと表示される事があります。
これはイタダケません(汗)。
そんな場合はsetup()関数の開始早々に、PSurfaceインタフェースが持つsetLocation()メソッドで、実行結果ウィンドウの表示位置を画面領域外に設定してしまうのが良いでしょう。
私の環境ではこれでうまくいきました・・・が厳密にはNGのケースもあるかもしれません。なにかうまい方法があれば、また紹介したいと思います。
【関連記事】
- 実行結果ウィンドウの位置を制御するには(3.X用)
- 実行結果ウィンドウのアイコン・タイトルを変更するには(3.X用)
- フルスクリーンにするには(3.X用)
サンプルプログラム
開始直後に非表示にする例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
boolean isUnVisible; //非表示中FLG float frameCount; //フレームカウント void setup(){ // //ここでsetVisible( false );しても //一瞬だけ表示されてしまう。 //いきなり場所移動するのがポイント // //できるだけ速やかに位置を変更 surface.setLocation(-300,-300); //非表示にする surface.setVisible( false ); isUnVisible = true; //フレーム数を初期化 frameCount = 0; textSize(24); textAlign(LEFT, TOP); frameRate(60); } void draw(){ //表示フレームを加算(1/60秒毎に加算) frameCount++; if( frameCount > 180 && isUnVisible ){ //非表示で、かつ3秒経過したら画面左上に表示する surface.setSize( 300, 300 ); surface.setLocation( 0, 0 ); surface.setVisible( true ); isUnVisible = false; } //こんにちはMSG表示(笑) if( isUnVisible == false ){ background(0); fill(255); text( "chao!",0,0 ); } } |
開始直後に場所移動している所がポイントです。
私の環境では、開始直後に setVisible( false ); しても実行結果ウィンドウの一瞬表示を防止できませんでした。
本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。