DXライブラリという、ゲームプログラミング向けライブラリで初めにやっておくべき初期設定を簡易的な説明を添えつつ列挙してみました。
とりあえずこれさえ設定しておけばあとはゲーム開発に専念できる!って感じです。参考までにどうぞ。
※Windows版を基準としているので、Android版やiOS版では使えない関数があるかもしれません。
※.NET版を使用してるので、C++で使用する場合はDX.
を削除してコピペしてください。
ChangeWindowMode
DX.ChangeWindowMode(DX.TRUE);
ウィンドウモードにするか、フルスクリーンモードにするかで変更できます。DX.TRUE
でウィンドウモード、DX.FALSE
でフルスクリーンモードです。
GPUの性能が飛躍的に向上した今日では、もはやフルスクリーンモードでゲームを起動する必要が無いですし、他のアプリと同時使用など考えるとデメリットの方が多いような気がします。ウィンドウモードでも、プライマリモニターと同じ解像度のウィンドウを用意することで仮想フルスクリーンとしてふるまうこともできます。
SetGraphMode
DX.SetGraphMode(1280, 720, 32); // 内部解像度を1280x720px、32bitカラーにする
内部解像度を変更します。第1引数に横解像度、第2引数に縦解像度、第3引数に色深度を指定できます。フルスクリーンモードの場合モニターに表示される解像度もこの値になります。ウィンドウモードの場合後述のSetWindowSizeExtendRate
も考慮されてクライアント領域がこの値のウィンドウが生成されます。
ちなみに第4引数があって、それを使用するとリフレッシュレートを変えることができます。が、そのリフレッシュレートに対応していないモニターの場合、~~ナナカクラッシュ!~~してしまうので非推奨です(自転車でふっとばされることはないのでそこはご安心を(?))。
SetWindowSizeExtendRate
DX.SetWindowSizeExtendRate(1.5); // ウィンドウ拡大率を1.5倍にする
ウィンドウモードで、ウィンドウの拡大率を指定します。1が等倍で、SetGraphMode
で指定された値と同じウィンドウが生成されます。たとえば、前節のSetGraphMode
に1.5倍すると、1920x1080px相当のウィンドウが生成されます。
SetWaitVSyncFlag
DX.SetWaitVSyncFlag(DX.TRUE); // 垂直同期する
描画内容を垂直同期信号に合わせて転送するか否かを設定できます。端的に説明すると、垂直同期をしないとチラついたり、映像がなみついたりすることがあります。もちろん垂直同期をしないことにもメリットがあるので、フレームレートが変動しても良いゲームロジックであれば、これはユーザーに選択させるのがベストでしょう(垂直同期をしないと、垂直同期信号を無視することになるので、フレームレートはリフレッシュレートを超えることになり、CPUとGPUが全力で仕事をします。僕とは大違いです。)。
SetUseTransColor
DX.SetUseTransColor(DX.FALSE); // アルファチャンネルのない画像で透過しない
DXライブラリでは、デフォルトの設定で画像の真っ黒(#000000)な部分を透過します(アルファチャンネルがない場合)。アルファチャンネルのついていないpng画像を使用するときにたいへんお節介な機能なので(自分の意図してない表示になるかも)、この記事ではこの機能を無効化することを強く推奨します。
SetUseDirect3DVersion
DX.SetUseDirect3DVersion(DX.DX_DIRECT3D_11_FEATURE_LEVEL_11_1); // Direct3D 11.1を使う
Direct3Dのバージョンを明示的に設定することができます、ふつうはDXライブラリが自動的に選択しますが、自分で選択したい場合はここで設定しましょう(どちらかというと、デバッグ時にDirect3D 9を指定して確認する、といった使い方をする方が多いような気がします)。
SetAlwaysRunFlag
DX.SetAlwaysRunFlag(DX.TRUE); // ウィンドウが非アクティブになったときでもゲームループする
ウィンドウが非アクティブになったときでもゲームループを進めるか否か設定できます。これもGPUの性能が飛躍的に向上した今日では停止する意味は皆無と言って過言ではないでしょう。
SetWindowText
DX.SetWindowText("なんかすごいゲーム"); // ウィンドウタイトルを「なんかすごいゲーム」にする
ウィンドウタイトルを設定できます。初期状態では「DxLib」なのでせっかくなので自慢のタイトルにしてしまいましょう。
SetDoubleStartValidFlag
DX.SetDoubleStartValidFlag(DX.TRUE); // 多重起動を許可する
ソフトウェアの多重起動を許可するか否か設定できます。これはケースバイケースですが、とくにセーブデータを扱うゲームなどでは多重起動できないように禁止しておく方が良いかもしれません。
SetMainWindowClassName
DX.SetMainWindowClassName("NankaSugoiGame");
ウィンドウクラス名を任意のものに設定します。実は、デフォルトの状態ではDXライブラリを使ったソフトウェアを同時に起動することができません。この問題を回避するにはこの関数を呼び出して任意の文字列に変更する必要があります。所謂名前空間的な。衝突を避けるためにできるだけ長い文字列の方が良いかもしれません。
さいごに
ここで紹介した一部の関数は、リファレンスページにも載っていない非公開関数です。使い方はその関数名と引数に渡す変数名でなんとなくわかるとおもいます。
非公開関数はかなりの数があって、かなり便利な関数もあるのでここでとっておきのページを紹介します。
dxライブラリ隠し関数のページ - CCS Wiki https://densanken.com/wiki/index.php?dx%A5%E9%A5%A4%A5%D6%A5%E9%A5%EA%B1%A3%A4%B7%B4%D8%BF%F4%A4%CE%A5%DA%A1%BC%A5%B8
DXライブラリ制作者様も非公開な関数が多いことを認めてるらしく、リファレンスの作成が追いついていないようです……。非公開関数も併用してこそDXライブラリの真価を発揮するので、リファレンスページやこのWikiを活用しながら、ゲーム制作を進めると良いでしょう。