Anti「DirectXのススメ」

さあ、とうとう始まりました。
恐怖のAntiススメ(反奨励)シリーズ第一弾です。
アンチを進ませるコーナーじゃありません。

最近、ゲーム作りといえばDirectXを使わねばならないと思い込んで無意味にDirectXを使って損をしている人が多いような気がしたので、DirectXの良い所、悪い所を紹介していくことにしました。
何もDirectXを使うなというわけではありませんので。


DirectDraw

DirectDrawの最大の強みは、なんといっても描画速度です。
矩形の単純転送ならばAPIと比べて数倍の差が出ます。
シューティングゲームなどでは、素早い描画速度が要求されるため、そんな場合には大いにDirectXを使ってください。
しかし、その素早さが要求されない場合はどうでしょうか。
DirectDrawの特徴としてもうひとつ、フルスクリーン表示があります。
これも、ディスプレイドライバがサポートしていないサイズではフルスクリーンにできないため、縦横比が3:4くらいでないと意味を持ちません。
また、エフェクト系もDirectDrawは苦手です。
サンプル2のようなことはDIBの得意分野で、DirectDrawではやりにくいです。

というわけで、縦横比が3:4ぐらいのゲームで毎秒何十回も矩形の単純転送をするのならば、DirectDrawの出番です。
逆に、縦横比が3:4から大きくはなれていて、たまにしか画面の書き換えをせず、エフェクトをバリバリ使うゲームであれば、DirectDrawはやめておいたほうがよいです。


DirectSound

どうなんだろ。普通のAPIを呼んでも勝手にDirectSoundが使われることもあるみたいだし。最近の情勢はようわからん。


DirectMusic

結論から先に言いますと、MIDIの方をDirectMusicにあわせる必要があります。
というのも、MIDIの種類によって次のような異常演奏が確認されるからです。
(太字はDirectMusicをリセットすれば直ることがあります)

・ノートオフされない(音が消えない)
・プログラムチェンジが無視される(音色がすべてピアノになる)
・テンポがおかしくなる
ピッチベンドがおかしくなる(凄まじいことになる)
音が一部出なくなる(わけの分からない音楽を演奏してしまう)
・DirectXのバージョンによって演奏結果が異なる

これらの現象が起きないのであれば、何もいうことはありません。
いくつか対策方法も見つけました。
ただし、曲ごとにDirectMusicを使うかどうか設定できるようにしておいた方が親切だと思います。


DirectInput

使う価値をあまり感じません。
なぜなら、DirectInputのやっていることはほとんどすべてWindowsからメッセージを受け取ってそれを変数に格納すればすむことだからです。
それに、キー入力では GetAsyncKeyState API などもあります。
マウス入力に関しては GetCursorPos API があります。

・・・・とはいっても、やはりDirectInputでしかできないこともあります。
例えばフォースフィードバックなどがそうです。
キーボードとマウス以外の入力機器も使えるらしいです(未確認)。
高速らしいです(気にする人なんていないと思うけど)。

ある程度大きなゲームを作るのなら必要になることがあるかもしれません。


Direct3D

えっとですね、当たり前ですが、2Dの描画は苦手です。
Direct3D8でドット絵の描画に見事失敗した(のに実は正しい結果である)図を置いておきます。
やっぱDirectXで2DといったらDirectDrawですよ。


最後に

だからAntiDirectX」のススメじゃないってば!!