画像描画には CMglImageクラス を使います。
「初めての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した状態でビルドすると、ワークスペースの「外部依存関係」
の所にそのヘッダファイルが出てきます。これを適当に、別のフォルダでも作ってあげて
そこに入れてあげるとインテリセンスが機能するようになります。(暫定対処…?)
>戻る