スポンサーサイト

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

DXライブラリ方式にしようと思う

シングルトンパターンで、
リソースマネージャークラス(テクスチャ等を一括管理する)を構築していたのですが、

ちょっとコレをDXライブラリ方式にしようと思います。


DXライブラリ方式とは、DXライブラリみたいなやり方という意味です。
(まんまですね)


具体的に言うと、
今はリソース管理クラスからリソースへのポインタを貰う形式になってます。
【参考画像】
ManagerClass.jpg


しかし、コレは不便でした。

何でかと言うと、画像を表示しようと思ったら
利用するクラスは"LPDIRECT3DTEXTURE9"という型を知っていないといけないですし、
SetTexture関数を呼び出す際には、"LPDIRECT3DDEVICE9"型の変数で
Device->SetTexture(0,mTexture); みたいにしないといけません。

自分は、わざわざ各クラスに デバイスを取得する関数を作って
いちいちデバイスを取得してました。
(画像を描画する処理などがある クラス全部。)

今思えば、何でこんな面倒くさい仕様にしたのか意味不明。

よって、int型のハンドルを受け取って、
描画する時は、ハンドルを渡して描画させる という方式に変更予定です。
-------------------------------------------------------------------------
handle = LoadGraph( "Tiger.bmp" ) ;
DrawGraph( 0 , 0 , handle , FALSE ) ;

-------------------------------------------------------------------------
こうすれば、各リソースの変な型を知る必要は無いので便利です!
(ポインタとかも隠蔽できますし)


あと、関係ないですが、DXライブラリは
いつまにか3D関連の事も出来るようになってますね。
2Dぐらいしか出来ないと思ってましたが、何か進化してました。

※ただ、いくつか不具合などは あるっぽいです
スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

コメント

設計は難しい・・・

プログラムの設計は難しいですよねw
そのときは、これ以外に無い!!って思っていても次の日に見直して、なんじゃこりゃ?っとなることもしばしば・・・

私がtextureの管理をしていた方法も似たような方法でやっていました。

ロードするとき
// テクスチャ番号+テクスチャ名
loadTexture( 0, "test.bmp" );

描画するとき
// テクスチャ番号を指定
drawTexture( 0 );

削除するとき
// テクスチャ番号を指定
deleteTeture( 0 );

みないな感じで作りました。

後は、ディスクリプタを作ってしまったり・・・

No title

お久しぶりです。最近は時間の流れがほんっと早いですね。
私もプログラムしててめげそうになります。
ひとつ気になったのですがenumではだめなんですかね?
例えば・・・

//DrawGraph関数を含むクラスがあるヘッダ-内
enum TEX_Name{
em_Tex_Tiger = 0, //トラのテクスチャ
em_Tex_Human, //人用テクスチャなど
em_MAX_OF_TEX, //番兵
};
// 中略

//利用するクラス内部
DrawGraph( 0 , 0 , em_Tex_Tiger , FALSE ) ;


この場合DrawGraph関数を所有するクラス内部から
テクスチャデータがあるポインタへの変換、または直接データをクラス内部に保有しているのが
条件ということにはなりそうですが・・・。(もちろん利用側はそれを気にしないでいいです。)

利用する側ではわざわざハンドルを取得する手間も必要なくなりますし、
intと違って直感的に何のtextureを使っているのかもわかるかと思います。
DrawGraph関数が使える時点でヘッダーをincludeしてると思ったので
enumが使えると思ったのですが・・・。

後どうでもいい話ですが、たぶん大学同じですねw

No title

>>だるいさん
何気に、クラスの構築・設計の部分が一番 難しかったりしますよねe-260

「キャラクターを右に移動させる方法が分からない!」、みたいに
複雑な処理が無ければゲーム部分で詰まる事はあまり無いですし)

「これでよし!」と思ってたら、
後から訳の分からんバグや 構造上の問題に悩まされたりします。

あ、やっぱりポインタを貰う形式より
任意のハンドルを渡して 面倒な事は全部やってもらう形式にした方が便利ですよねv-290

オブジェクト指向なんかは、柔軟に構築できる代わりに
様々な構築方法が考えられるので、それが悩む原因になりますねv-292
(最初の頃は、メモリリークして壊れる変なクラス構造などを作ったことがあります。)

No title

>>toryさん
お久しぶりですv-290

ホントに早いですねe-260
中規模、大規模なゲーム作ろうとしたら、間違いなく半年以上はかかると思いますv-293
(あっというまに時間が経つ)

とりあえず、あれから自力でスキンメッシュアニメーションを実装する事に成功しましたe-259
(参考書が意味が分からないほど存在しないので、理解するのに無駄に時間がかかりました)

おぉ、予め使用する画像が固定であれば
「画像の種類はコレだけあるから、この中から選んでね」
という方式の方がハンドルも必要なくて便利そうですねv-291
誤った画像ファイル名を指定して、読み込み失敗という事も起こらないですし)

コチラの方式も 色々と試行錯誤しながら実装を考えて見ようと思いますv-290

大学が同じですか!e-447
それならば、恐らく 今までに記事で出した情報などから
個人まで特定可能です。
(だが気にしない!)

ともかく、今後も作品の制作など頑張っていきましょうe-454e-76

No title

>>中規模、大規模なゲーム作ろうとしたら、間違いなく半年以上はかかると思います
私がゲームを作っていたときはライブラリからを合わせると約1年かかりました。
きっと効率が良くなかった・・・

>>参考書が意味が分からないほど存在しないので
確かに参考になるものが少ない。
アニメーションを担当していた友人は大変そうだった。

その友人が参考してたのがnVidiaから出てるcg関連の本だったはず。
シェーダに関してだったかもしれないけど・・・


話は変わるのですが、LPDIRECT3DTEXTURE9はTextureクラスとしてラッピングしてますか?
上の日記だと剥き身のまま使っている感じがしたので、少し質問です。
間違っていたらごめんなさい。

No title

専門的になればなるほど、参考書も少なく
開発にも時間がかかりますよねv-292

自分の場合は、まだサークル活動と卒業研究も残っているので
まだまだ時間がかかりそうですe-444


あと、ポインタは普通に露出状態で使ってました。
コレは明らかに修正すべきですよねv-404
スキンメッシュアニメーションを実行させるクラス群を作った際、
"とにかく動いて欲しい"ということを最優先で、コードを書いていったので
ところどころ「コレはまずいだろ」と思える箇所がいくつかあります。
(初めから ちゃんとプログラムを組むべきだったと反省)

間違ってない

>>"とにかく動いて欲しい"ということを最優先で、コードを書いていったので
そのやり方で良いと思います。変に設計とか意識すると余計にこんがらがってしまうので・・・

まず、実装してから一般化する方が一度そのプログラムを作るので、良く理解をしている状態で設計し直すことができ、リファクタリングしやすいと思います。(経験上)

確か・・・
「プログラムは一度では完成しない」という格言がありましたね。

No title

おぉ そうでしたか!
確かに、最初から完全版を作ろうとするより、作って修正・改良の方が良さそうですねv-290
(以前、頭の中でゴチャゴチャ考えるだけで、作業の方は一切進まないという状況になった事もあります)

プログラムは本当に1度じゃ完成しないですねv-292
エラーも出さず、一度で完成させられるのは "HelloWorld"のような初歩的なものぐらいだと思います。
コメントの投稿
管理者にだけ表示を許可する



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