ダイレクトX基礎

注意:だいぶ古い記事なので、最近のダイレクトXとは違う内容になっています。

パソコンはゲームには向いていない

Windows パソコンはゲームには向いていません。
というのも複数のウィンドウが平行して処理を行うことを前提として動いているからです。
IEなどのブラウザーでネットを見ながら、アウトルックでメイルを出し、
マイ コンピュータ を開いて中のファイルを整理する。
という平行作業を行うでしょう。Windows パソコンはそのような用途の為に設計されています。
プログラムはCPUを占有しないでキーを押すなどのイベントが起きた時のみに
動くように考えられています。
しかし高速ゲームはCPUを占有し他のアプリケーションを止めて動きます。
本来の Windows のプログラムとは違った組み方が必要です。



パスの指定

ダイレクトXを使用するにはパスを指定する必要があります。
パスの指定についてはこちらを参照して下さい。


ダイレクトX

パソコンは画面を表示したりするために Windows−API というシステムを使用しています。
しかしこれは低速で使いづらくゲームには向いていません。
そのためマイクロソフト社はダイレクトXというシステムを開発しました。
大抵のゲームはこのダイレクトXを使用しています。
よくゲームに「ダイレクトXが必要」とか「ダイレクトXが付属している」とか書かれています。
ゲームを見たらばそのへんを確認してください。

ダイレクトXの最新版はver8なのですが、2Dと3Dが統合されたりして、
入門用としては1つ前のver7の方が適していると思います。
ここではver7について解説します。

ダイレクトXには各種の機能があり、機能により以下の部分に分かれます。

DDRAW(ダイレクト・ドロー)
DSOUND(ダイレクト・サウンド)
DMUSIC(ダイレクト・ミュージック)
DPLAY(ダイレクト・プレイ)
DINPUT(ダイレクト・インプット)
D3D(ダイレクト・3D)
2Dの絵を表示する
音楽を鳴らす
MIDI音楽を鳴らす
通信を行う
ジョイパッド入力を行う
3Dの絵を表示する

そして当面は DDRAW のみを使用します。



Windows および ダイレクトX のプログラム

通常の Windows およびダイレクトX(正確にはダイレクト・ドロー)のプログラムは
以下の順番で作ります。

メインルーチン
通常のCのメインは main() ですが、ウィンドウズのメインは WinMain です。
システムからパラメータを受け取るので規則に従って作る必要があります。
またイベント処理などは Windows 標準の合わせて作る必要があります。

ゲーム本体
メインルーチンから毎ループ呼ばれます。
これは比較的に自由に作れます。

初期化
初期化は規則に従って行います。
主に以下の手順が必要です。
1 ウィンドウを作る
2 ダイレクトドローを使用できるようにする。
3 画面占有モード(エクゼクルーシブ・モード)にする。
4 640X480X8モードにする。
5 画面全体のパレットを読みこむ
6 絵を読みこむ
7 抜き色を指定する。

コールバック関数
キー入力などのイベントが起きたときに呼ばれるのがコールバック関数です。
ゲームでは多用しないので、システムで必要な最低限の機能だけ使います。

リストア(再読み込み)
別のアプリケーションが動いた時などに、グラフィックなどが失われることがあります。
その時は再読み込み(リストア)しなければなりません。

初期化失敗
初期化に失敗した場合は規則にしたがってプログラムを終了させなければなりません。

リリース(開放)
ゲームを終了する前には確保したメモリーを開放(リリース)しなければなりません。
さもないとメモリーは確保されたままで、プログラムを実行する度にシステムが使用できる
メモリーが減って行きます。



サンプルの解析

上にプログラムの手順を書きましたが、これでは何のことだか分からないと思います。
これを理解するにはマイクロソフトのサンプルプログラムを解析するのが一番です。

と、言っても現在はダイレクトX8になり、2Dが無くなりました。
またサンプルも難しくなってしまいました。
そこでダイレクトX7のサンプルを提供します。
これをダウンロードして解析して下さい。

ダイレクドドローサンプル
サイズ:130KB

ただし米国マイクロソフト社が作ったのでコメントは全て英語です。
まず、コメントを日本語訳する所から始めるのが良いと思います。

実務ではマニュアルが英語しかないということが頻繁にあります。
しかし技術用語ばかりなので中学英語ぐらいのレベルで何とか読めます。
英語のコメントを読むのは非常に有益なことですので、この機会に行って下さい。


ダイレクトX7SDKがある人
ダイレクトX7SDKがある人は実行方法を以下に書きます。

実行プログラム
c:mssdk/samples/multimedia/ddraw/bin/ddex4.exe

ソース
c:mssdk/samples/multimedia/ddraw/src/ddex4


そして立ち上げは ddex4.mdp を使ってください。
バージョンが古いと言われますので、全部「はい」を選んでください。
cpp で立ち上げてはいけません。

しかし、これをビルドすると エラー が出ます。
マイクロソフトはなんと不親切なサンプルを作ったものだろう。

ファイル ddutil.h が無いとエラーが出るので、このファイルをコピーしてください。

コピーするファイル
c:mssdk/samples/multimedia/ddraw/include/ddutil.h



ダイレクトXの入手方法

開発用ダイレクトX(ダイレクトX SDK)の入手方法は3種類あります。

1 マイクロソフトのHPからダウンロードする。
無料でダウンロードできます。アドレスはここです。
しかし100M以上あるので、普通のモデムの人は止めた方が良いです。
ダウンロード:
http://www.microsoft.com/downloads/details.aspx?FamilyId=AFC15F29-D7C9-4CF7-A8D5-8AB81F14AE1B&displa ylang=en
解説:
http://www.microsoft.com/japan/msdn/directx/dxreadmej.asp

2 雑誌の付録
Cマガジンなどの雑誌の付録CDに付いていることがあります。
しかし、号によって付いている時と、無いときがありますので、
内容を調べてから購入しましょう。

3 CD付き入門書
ダイレクトXのCD付き入門書を買うのも方法です。2−3千円で購入できます。
本格的にダイレクトXを解析したい人にはお勧めです。



ダイレクトX、必要な英単語の日本語訳

ダイレクトXの解析に必要であろう言葉を書きました。
単語さえわかれば後は中学英語でも分かると思います。

一般的な意味

surface  表面、層
primary  第一の、基本の
offscreen  見えない所の
flip    裏返す
function  関数、機能
fail    失敗する
restore  (盗まれた物を)元に戻す、復活させる、再建する
release   開放、釈放、解除、(レコードなどを)発売する
update   最新の物にする、更新する
exclusive  独占、排他的
initial   初期
require   必要とする
portion   一部
decide   決定する、決心する
complete   完全な、完了する
frame    テレビの画面、枠、フレーム
blt     (このサンプルでは)絵を描く


ダイレクトX特有の言葉

primary surface 表画面
back buffer   裏画面
offscreen surface 絵を置く所
bitmap      絵のイメージ部分
palette     絵の色部分
initialization 初期化
buffer     物を置く所



ダイレクトX、最初の日本語訳

ダイレクトXのサンプルの最初に長い英文が有る。
大サービスで翻訳を書きます。
これ以降は2、3行のコメントなので、自力で翻訳できると思います。

//-----------------------------------------------------------------------------
// File: DDEx4.CPP
//
// Desc: Direct Draw example program 4. Adds functionality to
// example program 3. Creates a flipping surface and loads
// a bitmap image into an offscreen surface. Uses BltFast to
// copy portions of the offscreen surface to the back buffer
// to generate an animation. Illustrates watching return
// code from BltFast to prevent image tearing. This program
// requires 1.2 Meg of video ram.
//
// ダイレクト・ドロー・サンプル4。サンプル3に新機能を追加した。
// (表画面と裏画面を)取りかえるサーフェイスを作り、
// ビットマップ(絵の本体)をオフスクリーン・サーフェイスに読みこむ。
// BltFast関数を使いオフスクリーン・サーフェイスの一部をバックバッファに
// コピーしアニメーションを作る。BltFast関数のリターンコードを
// 見てイメージが壊れるのを防いでいる。(この行は翻訳に自信無し)
// このプログラムは1.2MのV−RAMが必要である。
//
// Copyright (c) 1995-1999 Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------



トップメニューへ戻る