LoginSignup
1
0

DXライブラリの初期化と終了

Last updated at Posted at 2024-02-17

はじめに

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 が返ってきます。ただし、失敗することはほぼないので、戻り値を無視しても通常は問題ありません。

このプログラムを実行すると画面が一瞬暗転します。これはゲームがフルスクリーンモードで起動されるためで、現在は初期化を行ってすぐに終了しているため問題ない動作となります。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0