ここではJava用DXライブラリの基本的な使い方とアニメーションの原理を紹介する。 |
【Java用DXライブラリの使い方とアニメーションの原理】
■手順0:あらたなサンプルプログラムを実行してみよう。
ここで解説したように,実行の構成を
・プロジェクトを「DxLibGame」
・
メインクラスを 「Main」
にして実行してみよ。
黒い画面上を左上から緑の円が右下に向かって移動していく様子が確認できるはずである。
このプログラムを例に,Java用DXライブラリの使い方とアニメーションの原理を説明する。
このプログラムの内容を解説する前に,コンピュータのグラフィックに関する基本知識を以下の図に示す。
【今回のゲームプログラムの解説】
・プロジェクト『DxLibGame』の中のソースファイル Mainr.java の中身を見てみよう。
オレンジ色の部分は,働きだけ理解すれば十分で,今は特に暗記などする必要はない。
Main.java
① Java用DXライブラリは jp.ac.tuis.lib.DxJava クラスにまとめられているので,import する。
DXライブラリの機能は,DxJavaクラスのstaticメンバとして定義されており,
メソッドは DxJava.ClearDrawScreen(); のようにクラス名から staticメソッドとして呼ぶ
定数は DxJava.DX_SCREEN_BACK のようにクラス名から static final 定数として利用する
ようになっている。
② int型の変数x, y を初期値0で宣言している。この変数x, yは,画面に円を描画するときの中心座標を入れるために用意した。
③については,後述する。
④ 青い線で囲んでいる部分『 while( 0 == DxJava.ProcessMessage( ) ) { } 』の rocessMessage( ) メソッドもDXライブラリの
機能で,Windows のプログラムがスムーズに動作するために1/60秒ほどの頻度で呼び出してやる必要がある。通常は
0を返すが,ウィンドウが閉じられると -1 が返ってくる。④の while文に含まれる⑦〜⑨は,ウィンドウが閉じられるまで
繰り返されることになる
。
⑤『ClsDrawScreen( )』命令は,DXライブラリの機能である。画面に描画されている内容をまっさらに消す働きをする。
⑥『x = x + 3; y = y + 3;』は,変数 x, y の値をそれぞれ3だけ増やしている。これで,円の中心座標が移動することになる。
⑦ DrawCircle( )メソッドは,DXライブラリの機能で,ここでは座標x,yに半径25の円を緑色で描画している。
GetColor( )メソッドも DXライブラリの機能で,第1〜3引数は順に光の三原色(Red, Green, Blue)をそれぞれ0〜255 の
強度(輝度)で指定して色を作ることができる。0が一番暗く255が一番明るい。GetColor( )によって作られた色は,int型の
値として返される。DrawCircle( )メソッドの最後の引数は,円を塗りつぶすかいなかを,真理値を表すDXライブラリの定数
DxJava.TRUE (真)か,DxJava.FALSE (偽) で指定する。
⑧については後述する。
⑨『if( 1 == DxJava.CheckHitKey( DxJava.KEY_INPUT_ESCAPE ) ) break;』の CheckHitKey( ) メソッドもDXライブラリの機能
で,引数に定数で指定されたキーが押されていれば 1 を返し,そうでなければ 0 を返す。ここでは,実引数にエスケープ
キーを表すDXライブラリの定数 DxJava.KEY_INPUT_ESCAPE が指定されている。この行の処理のお陰でエスケープキーを
押すと,④の繰り返しが終了する。
おおざっぱに動作をまとめると,次の様になる。
動作は,隠されている「裏の画面」に位置(x,y)を中心に円を描き,「表画面(ウィンドウ)」に内容をコピーする。
次の繰り返しの時には,円の中心位置を少し変えて,再び「裏画面」に円を描き,また「表画面(ウィンドウ)」に内容をコピーする。
これを繰り返すことで,パラパラマンガの仕組みで円が移動するように見える。
・概要が理解できたら,実行してみよう。円が左上から右下へ移動するのが分かる。
・プログラムを終了するには終了はエスケープキーを押す。
③ SetDrawScreen( ) メソッドと
⑧ ScreenFlip( ) メソッドはDXライブラリの機能である。
・コンピュータの画面は,表示されて見えているウィンドウ(表画面)だけではない。目に見えないウィンドウ(裏画面,オフス
クリーン)を作ることも出来る。
・ここでは③の SetDrawScreen( )メソッドに定数 DxJava.DX_SCREEN_BACK を指定して実行している。こうすると
それ以降,描画先が「裏画面」になる。
・ゲームソフトなどでは,いったん裏画面にすべて(キャラクタや文字などの部品)を描写して「次のひとコマ」を完成した後,
それを目に見える「表画面」に転写する(下図右)。もし,表画面に直接,キャラクタや文字などの部品を描写してしまうと,
ちらついて見えてしまうためである(下図左)。そこで,すべて裏画面に描写し,1画面分が完成したら裏画面の内容を
表画面に一気に転写する。この「裏画面の内容を表画面に一気に転写する」命令が⑧の ScreenFlip( ) メソッドでる。
これを高速で繰り返すことで,ゲーム画面はちらつきもなくスムーズにアニメーションするように見えるのである。
●まとめ
※特に描写に関する処理は,『ゲームを駆動するループであるwhile文の内部,ClearDrawScreen( )メソッドの呼び出し直後からScreenFlip( )メソッド呼び出しの直前まで』
の部分に記述する。
Main.java