Dxlib(DXライブラリ)で画像を表示させる方法

dxlibで画像を表示させてみる。表示させる画像として、今回はミクさんを使う。

f:id:toumasuxp:20190715214920p:plain

Dxlibで画像を表示させるのに使う関数

画像を表示させるのに使う関数は、以下の通り

int LoadGraph( char *FileName )

FileNameに画像のファイル名を入れることで、指定した画像をメモリに保存してくれる。

int miku = LoadGraph("miku.png");

上記の様にすることで、miku変数を使う事でいつでも画像を読み込むことができる。

参考:DXライブラリ置き場 リファレンスページ

int DrawGraph( int x, int y, int GrHandle, int TransFlag ) ;

先ほどLoadGraph関数を使って画像をメモリに登録したが、実際に画像を画面に表示させる場合は、DrawGraph関数を使う。

DrawGraph(30, 20, miku, true);

上記の例だと、画面の左から30px,上から20pxの場所にmiku画像を表示させる。第4引数のtrueは、画像を透視させるかどうかを指定できる引数で、今回は特に透視してもしなくても良いので、適当にtrueとしておく。

最終的なコード

最終的なコードは、以下の通り。

#include <DxLib/DxLib.h>
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
ChangeWindowMode(TRUE);
DxLib_Init();
int miku = LoadGraph("miku.png");
DrawGraph(30, 30, miku, true);
WaitKey();
DxLib_End();
return 0;
}

ちなみに、ChangeWindowMode(TRUE);はウィンドウモードで表示するかどうかを指定できる関数で、trueにするとウィンドウモードにできる。

裏画面モードにして画像表示を快適にする

上記のサンプルだと画像を1つ表示するだけなので問題ないが、シューティングゲームの弾幕げーみたいにいくつもの画像を表示させる場合は、今のままだと「画面のちらつき」が生じる。

この画面のちらつきを無くすためには、SetDrawScreen( DX_SCREEN_BACK );関数を使って、裏画面モードにする。裏画面モードとは、「画像を1つずつ表示させるのではなく、画面に映す画像の読み込みが全て完了した時に画面の表示するようにする」と言うモードのことだ。

そして、全ての画像の読み込みが完了して、画面に表示させたい場合はScreenFlip関数を使うと良い。

最終的には、以下の様なコードになる

#include <DxLib/DxLib.h>
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
ChangeWindowMode(TRUE);
DxLib_Init();
SetDrawScreen(DX_SCREEN_BACK);
int miku = LoadGraph("miku.png");
DrawGraph(30, 30, miku, true);
WaitKey();
ScreenFlip();
WaitKey();
DxLib_End();
return 0;
}

上記のコードだと、画面が表示した後に何かボタンを押すとミクさんが表示されて、またボタンを押すと終了するプログラムになっている。

ReratedPosts

WindowsのMinGWでdxlib(DXライブラリ)を使う手順を紹介する