PC講習その1 DXライブラリ 画面に図形を表示したり、マウスの座標を調べたりできるよ DXライブラリがあるか確認 DXライブラリがあるか確認しよう 1. エクスプローラーを開く 2. ローカルディスク(C:)を開く 3. 「DxLib_VC」があればOK DXライブラリがない人は手を挙げてね DXライブラリ 2 プロジェクトの準備をし よう 詳しくは別のスライドで DXライブラリ 3 何もしないプログラム とりあえず下のプログラムを入れてみよう わけのわからんものがいろいろあるが、気にしない そして実行(Ctrl+F5) このプログラムは何もしませんが、これが基本になります #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPInst, LPSTR pCmdLine, int showCmd) { return 0; } DXライブラリ 4 DXライブラリの初期化と終了 DXライブラリにはいろいろな関数がある int DxLib_Init( void ) ; ライブラリの初期化 戻り値: 成功したら0、失敗したら-1 int DxLib_End( void ) ; ライブラリ使用の終了関数 戻り値: 成功したら0、失敗したら-1 戻り値が、成功=0,失敗=-1となる関数が多い DXライブラリ 5 DXライブラリの初期化と終了 下のプログラムを実行しよう フルスクリーンで起動してすぐ終了します #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPInst, LPSTR pCmdLine, int showCmd) { if (DxLib_Init() != 0) return -1; DxLib_End(); return 0; } DXライブラリ 6 ウィンドウモードにする ゲーム作ってる時にフルスクリーンは邪魔なので、ウィンドウモー ドにしよう int ChangeWindowMode( int Flag ) ; ウインドウモード・フルスクリーンモードの変更を行う 引数 FlagにTRUEを入れるとウィンドウモード FlagにFALSEを入れるとフルスクリーンモード DXライブラリの初期化の前にこれを使うと、ウィンドウモードで起 動する DXライブラリ 7 ウィンドウモードにする 下のプログラムを実行しよう ウィンドウモードで起動してすぐ終了します #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPInst, LPSTR pCmdLine, int showCmd) { ChangeWindowMode(TRUE); if (DxLib_Init() != 0) return -1; DxLib_End(); return 0; } DXライブラリ 8 ウィンドウを開いたままにする ウィンドウを開いたままにするにはどうしたらよいか 繰り返しを使ってプログラムを実行し続ければよい while (true) { } ところがプログラムは定期的にWindowsに応答しなければならない int ProcessMessage( void ) ; ウィンドウのメッセージを処理する 戻り値: 成功なら0、ウィンドウが閉じられていたら-1 DXライブラリ 9 ウィンドウを開いたままにする 下のプログラムを実行しよう ウィンドウが開いたままになる 右上の×ボタンをクリックして閉じる : : if (DxLib_Init() != 0) return -1; while (ProcessMessage() == 0) { } DxLib_End(); return 0; DXライブラリ } 10 図形を描く int DrawCircle( int x , int y , int r , int Color, int FillFlag ) ; 円の描画 引数 x,yは中心座標、rは半径 Colorは色コード FillFlagは、TRUEにすると中身も塗りつぶし、FALSEにすると輪郭のみ int GetColor( int Red , int Green , int Blue ) ; 色コードを取得する 引数: Red,Green,Blue、それぞれ0~255 戻り値: DXライブラリ カラーコード 11 図形を描く while文の前に追加して実行しよう : : if (DxLib_Init() != 0) return -1; int color = GetColor(0, 255, 0); DrawCircle(100, 100, 100, color, TRUE); while (ProcessMessage() == 0) : : DXライブラリ 12 図形を描く 円が表示される DXライブラリ 13 図形を描く int DrawBox( int x1 , int y1 , int x2 , int y2 , int Color , int FillFlag ) ; 四角形を描画 引数 x1,y1は左上、x2,y2は右下の座標 Colorは色コード FillFlagは、TRUEにすると中身も塗りつぶし、FALSEにすると輪郭のみ DXライブラリ 14 図形を描く さらに追加して実行しよう : : if (DxLib_Init() != 0) return -1; int color = GetColor(0, 255, 0); int colorBox = GetColor(0, 0, 255); DrawCircle(100, 100, 100, color, TRUE); DrawBox(0, 0, 400, 100, colorBox, TRUE); while (ProcessMessage() == 0) : : DXライブラリ 15 図形を描く プログラムは 上から下へと 実行される 円を描いた後 に四角が描か れる すると円が隠 れる 順番には気を 付けよう DXライブラリ 16 マウスの位置を調べる int GetMousePoint( int *XBuf, int *YBuf ); マウスカーソルの位置を取得する 引数: XBuf,YBufはX座標とY座標を保存するint型変数のポインタ DXライブラリ 17 マウスの位置を調べる マウスの位置を調べて、その位置に円を描くプログラム マウスカーソルの位置を画面の真ん中ぐらいにしてから、プログラ ムを実行しよう if (DxLib_Init() != 0) return -1; int color = GetColor(0, 255, 0); int x, y; GetMousePoint(&x, &y); DrawCircle(x, y, 10, color, FALSE); while (ProcessMessage() == 0) DXライブラリ 18 マウスの位置を調べる マウスカーソル があった位置に 円が描かれる ただし、マウス 座標の取得と円 の描画は一回だ けなので、マウ スを動かしても 円は動かない DXライブラリ 19 図形を動かす 「マウスの位置を調べる→その位置に円を描く」という処理をした これを繰り返し行えば円が動く while文に入れてみよう そして実行して、マウスを動かしてみよう if (DxLib_Init() != 0) return -1; int color = GetColor(0, 255, 0); int x, y; DXライブラリ while (ProcessMessage() == 0) { GetMousePoint(&x, &y); DrawCircle(x, y, 10, color, FALSE); } DxLib_End(); 20 図形を動かす わーい DXライブラリ 21 図形を動かす 「マウスの位置を調べる→その位置に円を描く」という処理を繰り 返した結果、円だらけになった そこで、画面を消して(真っ黒にして)から円を描くことにする つまり、「画面を消去→マウスの位置を調べる→その位置に円を描 く」という処理を繰り返す DXライブラリ 22 図形を動かす int ClearDrawScreen( void ) ; 画面に描かれたものを消去する 画面を消去する文を追加して実行しよう while (ProcessMessage() == 0) { ClearDrawScreen(); GetMousePoint(&x, &y); DrawCircle(x, y, 10, color, FALSE); } DXライブラリ 23 図形を動かす 円が一個だけ になった マウスを動か すと円も動く DXライブラリ 24 ダブルバッファリング ゲームはこのように「画面を消去→画面に描く」を繰り返している しかし、描くものが多くなると「消去→描く→描く→描く→描く」 という処理で、描いている途中の画面が見えてしまい、画面がちら ついて見える そこで、「ダブルバッファリング」という方式を使う ダブルバッファリングは以下の処理を繰り返す DXライブラリ 1. 裏画面を消去 2. 裏画面にいろいろ描く 3. 表画面に裏画面をコピー 25 ダブルバッファリング 裏 表 裏から表へコピー 裏は表示さ れない 実際に表示 されるのは 表だけ 表はちらつ いていない 裏を消す 裏に描く 裏から表へコピー DXライブラリ 26 ダブルバッファリング int SetDrawScreen( int DrawScreen ) ; 描画先グラフィック領域の指定 引数DrawScreen DX_SCREEN_FRONT : 表の画面(表示されている画面) DX_SCREEN_BACK : 裏の画面(表示されていない画面) int ScreenFlip( void ) ; フリップ関数、画面の裏ページを表ページに反映する ちなみにこの関数が実行されると、まずプログラムは一時停止し、ディスプ レイが更新されるタイミングに合わせて表に反映し、プログラムを再開する ちなみにディスプレイは1秒間に60回更新している while文にこの関数を入れるだけで、while文は安定して1秒間に60回繰り返す DXライブラリ 27 ダブルバッファリング 下のプログラムを実行しよう if (DxLib_Init() != 0) return -1; SetDrawScreen(DX_SCREEN_BACK); int color = GetColor(0, 255, 0); int x, y; while (ProcessMessage() == 0) { ClearDrawScreen(); GetMousePoint(&x, &y); DrawCircle(x, y, 10, color, FALSE); DXライブラリ ScreenFlip(); } 28 まとめ つまり、ゲームを作るときは次のプログラムを使えばOK DXライブラリ 29 まとめ #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPInst, LPSTR pCmdLine, int showCmd) { ChangeWindowMode(TRUE); if (DxLib_Init() != 0) return -1; SetDrawScreen(DX_SCREEN_BACK); // ↓ // ↑ 一回だけ while (ProcessMessage() == 0) { ClearDrawScreen(); // ↓ // ↑ 何回も繰り返す ScreenFlip(); } DxLib_End(); DXライブラリ return 0; } 30 関数リファレンス DXライブラリには、ほかにもいろいろな関数がある DXライブラリの公式サイト http://homepage2.nifty.com/natupaji/DxLib/ DXライブラリの「関数リファレンス」はDXライブラリの辞書 これを見ながらゲームを作ろう DXライブラリ 31 DXライブラリで分からないこと があれば プロジェクトの準備 「プロジェクトの準備」のスライドを見る プロジェクトの準備の後からダブルバッファリングまで このスライドを見る そこまでできたら DXライブラリの「関数リファレンス」で関数を調べる それでも分からないことがあったら ネットで検索 DXライブラリに詳しそうな人に聞く PC長に聞く DXライブラリ 32 終わり お疲れ様でした。次はC言語の復習をします DXライブラリ 33
© Copyright 2024 ExpyDoc