Processing(1.5.1)は自前でIDEを持っており、ソースコードの拡張子はpdeです。
中身はJavaなのですが、電子アートやビジュアルデザインを目的に作られたこともあり、簡単にコーディングできる反面、あまりJavaらしい開発(?)ができないと感じています。
そこで、私はPAppletを継承してeclipse上で開発しています。その方法はgoogleで検索すればでてきますので割愛しますが、要点を3つ挙げます。
- processing-1.5.1/lib/core.jarをライブラリに読み込む(その他必要がなれば追加する)
- PAppletを継承する
- 実行はJava アプレットで起動する
さて、Processingで開発したものをフルスクリーンで表示したいとき、ProcessingのIDEでは「Sketch」メニュー>「Present」でフルスクリーンで表示することができる(*1)。また、ライブラリとして個人の人が開発したAPIが提供されている。
FullScreen API For Processing
このライブラリは
processing-1.5.1\modes\java\libraries
に配置する。
ライブラリの設定は、Javaプロジェクトを右クリック>プロパティでプロパティを開き、Java のビルド・パスを選択し、ライブラリー>外部 Jar の追加ボタンをクリックし、さきほど配置したライブラリを選択し、OKボタンを押すと追加できる。
以上のステップでfullscreenのAPIが利用できるようになるので、さっそくサンプルと同じように記述してみる。
import fullscreen.*;
FullScreen fullScreen; @Override
public void setup(){
size(640, 480);
frameRate(5);
// Create the fullscreen object
fullScreen = new FullScreen(this); ・・・(*2)
// enter fullscreen mode
fullScreen.enter();
}
@Override
public void draw() {
// 省略
}
さて、Java アプレットとして起動すると、(残念なことに)以下のエラーが出る。
Exception in thread "Animation Thread" java.lang.NullPointerException
at fullscreen.FullScreen.
at fullscreen.FullScreen.
at jp.sample.fullscreen.SampleFullScreen.setup(SampleFullScreen.java:17)
at processing.core.PApplet.handleDraw(Unknown Source)
at processing.core.PApplet.run(Unknown Source)
at java.lang.Thread.run(Thread.java:662)
(*2)で FullScreenのインスタンスを作成している際、FullScreen.javaのinitメソッドでjava.lang.NullPointerException が発生している。
public FullScreen( PApplet dad ){{
this( dad, 0 );・・・(108行目)
}
public FullScreen( final PApplet dad, int screenNr ){
super( dad );
this.dad = dad;
// 一部省略
fsFrame = new Frame( dad.frame == null? "":dad.frame.getTitle() );
fsFrame.setTitle( dad.frame.getTitle() ); ・・・(93行目)
// 以下省略
}
この93行目のdad.frame.getTitle() で java.lang.NullPointerException が発生している。正確には dad.frame がnull である。
この java.lang.NullPointerException が発生しないようにする対策はぱっと思いつくもので2つあると思う。
- dad.frame にインスタンスを与える
- 93行目を削除し、自分でFullScreenのAPIを再ビルド、fullscreen.jarを作成する(未検証)
■1. dad.frame にインスタンスを与える
(*2) で FullScreen のインスタンスを作成する前に、以下のプログラムを1行追加する
this.frame = new Frame( "" );// ""には文字列を入れてもよい
これで93行目で null ではない(dad は this を参照している)のでエラーが発生しなくなり、フルスクリーンすることができる。
しかし、新しいフレーム ができる・・・ようは2つのウィンドウが起動している状態になるので少しスマートではないのが惜しむところ。動作自体は特に問題はないと思う。
もしかしたら、最初に立ち上がるウィンドウを this.frame に与えればよいかもしれない。
■2. 93行目を削除し、自分でFullScreenのAPIを再ビルド、fullscreen.jarを作成する(未検証)
93行目の行っていることは、フルスクリーンのフレームのタイトルに名前をつけるだけであり、また92行目でタイトルを設定しているので余分な処理である。
FullScreen APIのソースコードは配布されているので、ソースコードをダウンロードし、93行目を削除して再ビルドを行い、fullscreen.jarを作成することで java.lang.NullPointerException は発生しないと推測している。
以上、いずれかの方法でeclipse上でProcessingの開発を行ってもフルスクリーン化することができる。
これでまとめを終わりたいところであるが、その他の方法もあるので少しだけ触れたい。
■3. その他の方法
さて、ここで(*1)を思い出してほしい。ProcessingのIDEは「Present」で fullscreen.jar を使うことなくフルスクリーンを行っている。
したがって、「Present」で行っていることと同じようなアプローチをすればフルスクリーンできることが推測できる。
processing.core.PApplet.java, processing.mode.java.JavaEditor.java, processing.mode.java.PresentMode.java
などのソースをおっかけてみると良いと思う。
もしくは、自前でフルスクリーンを実装する。以下のサイトを参考にすると良さそう。
フルスクリーンモード - 人工知能に関する断創録
Processingのソースを解析してみると、上のサイトと同じようなことをやっている(当たり前と言えば当たり前だが)。
■まとめ
1の方法が手軽です。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。