MGL - チュートリアルその2


画像描画

画像描画には CMglImageクラス を使います。


初めてのMGL@とりあえず動かす編

初めてのMGL」からの続きです。
初めてのMGL」を読んでない人はちゃんとそっちから読んでないと駄目ですよっ!

 □ □ □

メインのcppが出来ている筈なので、その WinMain() 関数の中に以下を記述します。

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow )
{
	CMglEzGameFrame frame;
	frame.StartWindow( 640, 480, (LPTHREAD_START_ROUTINE)MainThread, "MGL Sample Program" );
	return 0;
}

「MainThread」はこれから作ろうとしているコールバック関数です。
CMglEzGameFrame::StartWindow() はウィンドウを作成した後、
別スレッドとしてこのコールバック関数を呼び出します。
(厳密にはその前に前処理等が含まれたりしますが…)

(※ちなみにインテリセンス(※パラメータヒント等の事)がちゃんと機能してくれないと思いますので
  「インテリセンスが機能しない...?」の方を参考にしてみてください。)

//	プロトタイプ宣言
BOOL MainThread( CMglEzGameFrame *pFrame );

//	関数本体
BOOL MainThread( CMglEzGameFrame *pFrame )
{
	for(int i=0; i<=255; i+=2)
	{
		pFrame->grp.Clear(D3DCOLOR_MONO(i));
		
		//	ウェイト処理と終了チェック
		if ( pFrame->DoFpsWait() != TRUE )
			return TRUE;
	}
	
	pFrame->MsgBox( "終わり。", "おわりだよー" );
	return TRUE;
}

コールバックの引数として、先の CMglEzGameFrame のインスタンス(frame)
のポインタが渡って来るのでこれを使用して色々処理をします。
具体的にどうなるかは…実行すれば一目瞭然かと思います。(笑

DoFpsWait() は指定されたFPS(デフォルト60)に合わせて
ウェイトするメソッドです。兼、他にも色々な処理(画面への反映とか)
を行うのでフレーム処理毎に呼ばないと駄目です。

また復帰値として、ウインドウがちゃんと生存しているか否かが返って来るので、
FALSE が帰ってきた場合は処理を抜けるように記述します。
(これをやらないと×ボタン押された時等にちゃんと終了しない…)

 
大体感覚は掴めて頂けましたかね…?
次回はもうちょっと切り込んだ話をしたいと思います。

 

インテリセンスが機能しない...?

どうも(少なくともVisual C++ 6.0では)ヘッダファイルがプロジェクトに
追加されていないとインテリセンスが機能しないようです。
(何で標準の関数とかは追加されてなくても出てくるんですかね…?良く分かりません。。。)

該当のヘッダファイルをincludeした状態でビルドすると、ワークスペースの「外部依存関係」
の所にそのヘッダファイルが出てきます。これを適当に、別のフォルダでも作ってあげて
そこに入れてあげるとインテリセンスが機能するようになります。(暫定対処…?)

 
 
 
 
戻る