はじめに
DXライブラリを導入してから最初に書くべきプログラムと注意点を紹介します。なお、DXライブラリの導入は公式サイトで詳しく解説されていますので、そちらをご覧ください。
開発環境
- Windows11
- Visual Studio 2022
- DXライブラリ Ver3.24d
最小限のプログラム
以下のプログラムが初期化から終了までのプログラムになります。このプログラムを入力してエラーが発生する場合、導入に不備がある可能性が高いので確認してください。
#include "DxLib.h"
int WINAPI WinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpcmdLine, _In_ int nCmdShow )
{
// DXライブラリの初期化
if( DxLib_Init() == -1 )
{
// -1ならエラーとしてゲーム終了
return 0;
}
// DXライブラリの破棄
DxLib_End();
return 0;
}
インクルード
#include "DxLib.h"
"DxLib.h"
はDXライブラリを使用するなら必須のインクルードになります。導入に不備があると、ここでエラーが発生することが多いので、戻って確認してみましょう。
DXライブラリの初期化
// DXライブラリの初期化
if( DxLib_Init() == -1 )
{
// -1ならエラーとしてゲーム終了
return 0;
}
DxLib_Init
関数はDXライブラリを使用可能な状態にする関数で、プログラム中に1回は必ず呼び出さなければなりません。この関数を呼び出さないと他のDXライブラリの関数が使えない(失敗する)ので、なるべく早い段階で呼び出してください。
DxLib_Init関数は失敗すると戻り値で -1 を返します。これに失敗した時点でゲームの起動は諦めたほうがよいのでエラーとして処理しましょう。
DxLib_Init関数が失敗する
滅多にありませんが、DxLib_Init関数で初期化に失敗することがあります。DXライブラリではこの失敗した原因をGetLastErrorCode
関数で調べることができます。
// DXライブラリの初期化
if( DxLib_Init() == -1 )
{
// エラーの原因を調べる
int error = GetLastErrorCode();
// 戻り値で受け取ったエラーコードで分岐
switch( error )
{
// 分岐例
case DX_ERRORCODE_WIN_DESKTOP_24BIT_COLOR:
// デスクトップが24ビットカラーモードだった
break;
}
return 0;
}
エラーの原因は以下の8パターンしかないそうです。
エラーコード | 説明 |
---|---|
DX_ERRORCODE_WIN_DESKTOP_24BIT_COLOR | デスクトップが24ビットカラーモードだった |
DX_ERRORCODE_WIN_DOUBLE_START | 二重起動 |
DX_ERRORCODE_WIN_FAILED_CREATEWINDOW | ウィンドウの作成に失敗 |
DX_ERRORCODE_WIN_FAILED_ASYNCLOAD_CREATE_THREAD | 非同期読み込み処理を行うスレッドの立ち上げに失敗 |
DX_ERRORCODE_WIN_FAILED_CREATE_DIRECTDRAW7 | DirectDraw7の取得に失敗 |
DX_ERRORCODE_WIN_FAILED_INITIALIZE_DIRECTDRAW7 | DirectDraw7の初期化に失敗 |
DX_ERRORCODE_WIN_NOT_COMPATIBLE_SCREEN_COLOR_MODE | 非対応の画面カラーモードが指定された |
DX_ERRORCODE_WIN_FAILED_CHANGE_DISPLAY_SETTINGS | Win32API の ChangeDisplaySettings を使用した画面モードの変更に失敗 |
ほとんどの場合は二重起動が原因であることが多いので、特に理由がなければ詳細なチェックは省略してよいと思います。二重起動していないのに失敗するようなことがあれば確認してみてください。
DXライブラリの終了
// DXライブラリの使用を終了する
DxLib_End();
DxLib_End
関数はDXライブラリの使用を終了するときに呼び出す関数で、基本的にはプログラム終了直前で呼び出します。呼び出さなくても見た目上問題がなさそうに見えますが、DXライブラリは内部で様々な処理を行っているため、潜在的な不具合が残る可能性があります。確実に呼び出すようにしましょう。
DxLib_End関数にも戻り値があり、失敗すると -1 が返ってきます。ただし、失敗することはほぼないので、戻り値を無視しても通常は問題ありません。
このプログラムを実行すると画面が一瞬暗転します。これはゲームがフルスクリーンモードで起動されるためで、現在は初期化を行ってすぐに終了しているため問題ない動作となります。