Help us understand the problem. What is going on with this article?

DXライブラリでゲーム開発するための、初めにやっておくべき初期設定10選

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を活用しながら、ゲーム制作を進めると良いでしょう。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away