スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

自作ゲーム ~進捗状況報告~

ゲーム制作はどうなっているのか? というと、
今、根本から設計を見直してます。
(クラス分けとか)

以前聞いた話ですが、ゲーム関連の企業へ作品を提出する場合
設計の部分なども見られるとの事。

なので、ちゃんとやっておこうかなと。

この前は、ウィンドウ生成の部分と、DirectXのゲームループの部分の
切り離し作業
とかやったりしました。

「今は何をしてるの?」というと、
----------------------------------------------------------------------
DirectXのヴァージョンの違いを埋める(隠蔽する)クラスとかあったらいいな
----------------------------------------------------------------------
と思い、 そのクラスの作成をやってたりします。


具体的に言うと、DirectXはヴァージョンによって関数の引数が変わったり、
関数自体が消滅したり、
色々と変わるんですよ。

なので、ソースコードに、下記の様に書いたとします。
--------------------------------------------
g_pD3DDevice->SetTransform(中略);
g_pD3DDevice->DrawIndexedPrimitive(中略);

--------------------------------------------
この場合、DirectXのヴァージョンを変わって、関数の仕様などが変更されてしまった時は、
仕様変更された部分のソースコードは、全部書き直しになります。
大規模なゲームだったら 修正に途方も無い時間がかかるでしょう。

これの対策として、LPDIRECT3DDEVICE9型とか、
かなりヴァージョンに依存する変数や関数などは全て隠蔽します。

例えばこんな感じの基底クラス(抽象クラス)を作っておいて、
class CDirectXBase{
public:
virtual HRESULT DrawXFile(int XFileHandle) = 0;
virtual int LoadXFile(char* XFileName) = 0;
/*中略*/
};


で、派生させます。
class CDirectX9 : public CDirectXBase{
public:
HRESULT DrawXFile(int XFileHandle);
int LoadXFile(char* XFileName);
/*中略*/
};

class CDirectX10 : public CDirectXBase{
public:
HRESULT DrawXFile(int XFileHandle);
int LoadXFile(char* XFileName);
/*中略*/
};



そして、ソースコードで下記の様に記述しておきます。

--------------------------------------------
CDirectX9 d;
int handle = d.LoadXFile("nabe_zyunn.x");
d.DrawXFile(handle);

--------------------------------------------

こうしておけば、もしヴァージョンが変わった場合でも、
最初のクラスの部分だけを変更すればOKとなります。
(もちろん、派生クラス(CDirectX10)独自の関数内の処理を定義する必要はありますよ)

--------------------------------------------
CDirectX10 d;
int handle = d.LoadXFile("nabe_zyunn.x");
d.DrawXFile(handle);

--------------------------------------------
関数名 および 関数の引数は統一してあるので、変更の余地が無いのです。

素晴らしいですね。
(ついでにシングルトンパターンにしたりとか してみようかな。)

まぁ、という訳で ヴァージョンの違いを吸収するクラスの作成とか今やってます。
スポンサーサイト

テーマ : ゲーム - ジャンル : ゲーム

コメント

No title

僕はゲーム業界の人間じゃないので、詳しい事はわからないのですが。
日本のゲーム業界のハードは基本、統一されていますし、それほどバージョンの隠蔽は重要ではないと思います。

No title

なるほど、そうでしたかv-292

確かに、企業によっては企業独自のライブラリとか使ってたりするらしいですし、
ライブラリ自体に互換性を持たせてあったりするかもしれないですね。
(詳しい事は分からないですが)

とりあえず、ヴァージョンの違い云々は置いといて、
面倒な関数の呼び出しを隠蔽するクラスは作っておこうかなと思います。
(メモリの確保・開放などの、諸々の処理を隠蔽する)
コメントの投稿
管理者にだけ表示を許可する



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。