フレームワークの使用

ここでは、レンダラーや表示画面の生成などを自動化してくれる、フレームワークの使用方法を扱います。

- 目次 -

面倒な定型処理を自動で行ってくれるフレームワーク

これまでは、レンダラーやグラフィックスデータ、および表示画面を生成したり、画面の GUI を描画させたりといった処理を、毎回行ってきました。しかし、これらの処理はいつも同じような内容なので、毎回いちいち書くのは面倒です。

そこで VCSSL の標準ライブラリには、これらの処理を自動で行ってくれるフレームワーク「 Graphics2DFramework 」が用意されています。これを使用すれば、ユーザーは、いくつかのタイミングで自動的に呼び出される関数の中に、描画内容の処理などをただ書くだけで済みます。

フレームワークを使用する方法は非常に簡単で、プログラム内でフレームワークを import するだけです。

import graphics2d.Graphics2DFramework ;

これだけで、プログラムを実行すると自動でレンダラーやグラフィックスデータが生成され、画面も表示されるようになります。 つまり、形の上では、2DCG の描画用プログラムとして一応できあがったものになります。ただし、この段階では画面上は真っ白で、まだ何も描画されません。

フレームワークの画面上に描画などを行わせるには、関数を定義する

画面に何らかの内容を描画させるには、プログラム内に onPaint という名前の関数を定義して、その中に行わせたい描画処理を記述します。 そうすると、その関数をフレームワーク側が適当なタイミングで実行してくれて、その結果が画面上に表示されるようになります。

これまでのプログラムでは、ユーザーが書いた内容だけが、「上の行から下の行へ」の流れで単純に実行されてきました。 しかしフレームワークを使用したプログラムでは、処理の流れを司るのはフレームワークであり、ユーザーはそこに「関数を定義して処理を追加していく」という形で開発を行います。 上で述べた onPaint 関数をはじめ、以下のような関数を定義して処理を追加できます:

・プログラムの最初に呼び出される関数(各種設定や、画像の読み込み処理などを記述)
void onStart ( int rendererID )

・画面更新周期ごとに呼び出される関数(画面の描画処理などを記述)
void onPaint ( int rendererID )

・画面更新周期ごとに呼び出される関数(アニメーションでの位置の更新処理などを記述)
void onUpdate ( int rendererID )

・画面サイズが変更されたときに呼び出される関数
void onResize ( int rendererID )

・プログラムを終了する時に呼び出される関数
void onExit ( int rendererID )

引数の「 int rendererID 」には、フレームワークから呼び出される際に、自動で用意されている2DCG レンダラー(描画エンジン)の ID が入っています。

なお、上記の関数を全て定義する必要はありません。使うものだけを定義し、処理を記述してください。 単純に画面上に絵を描きたいだけであれば、onPaint 関数だけで十分です。

onPaint関数は毎秒数十回(負荷にもよりますが、大体 1 秒間に 30 回ほど)の頻度で繰り返し実行され続けますが、それと交互に onUpdate 関数も実行されます。 アニメーション描画を行いたい場合は、この onUpdate 関数の中に、描画位置などの変数の値を少しずつ変化させるような処理を記述するとよいでしょう。

onStart 関数には、画像ファイルの読み込みなど、プログラムの最初に 1 度だけ行えばよい処理を記述します。 逆に onExit 関数には、画像ファイルの保存など、最後に 1 度だけ行いたい処理を記述します(画面が閉じられたタイミングで実行されます)。

プログラム例

それでは、実際にフレームワークを使用し、画面に単純な内容を描画させてみましょう。以下のように記述し、実行してみてください。

Framework.vcssl

このプログラムを実行すると、グレーのウィンドウが表示され、その上に青い点が表示されます。

実行結果、グレーの画面に青い点の図。
実行結果
グレーの画面に、青い点が表示される。

続いて、アニメーションを行う例です。以下のように記述し、実行してみてください。

FrameworkAnimation.vcssl

このプログラムを実行すると、先ほどと同様、グレーのウィンドウ上に青い点が表示されますが、青い点はゆっくりとアニメーションで移動していきます。

実行結果、グレーの画面に青い点の図。
実行結果
青い点がゆっくりとアニメーションで移動していく。