ページ 11

クラスの効率の良い使い方?について

Posted: 2010年7月16日(金) 22:33
by シエル
いつもお世話になっております。シエルです。

ちょっと内容とタイトルとが合ってないかもしれませんが、
クラスの効率の良い使い方について、質問があります。
今まで画像を描画する際に、テクスチャの変数(LPDIRECT3DTEXTURE9型のlp3dtex9)を配列にして値を格納し、
Draw(lp3dtex9[0])のように、変数の配列の要素番号を指定しながら描画していました。
ですが、何の画像か分かりにくいうえ、解放するときも別の関数を作る必要があったため、
、下記のような画像のサイズとテクスチャの情報を持ったクラスを作成し、
コンストラクタで、テクスチャを作成、デストラクタでテクスチャを解放できるようにしました。

下記のクラスはコンストラクタで、文字、文字の高さ、フォントを渡すと、
その大きさのテクスチャを作成してくれるクラスです。
(コンストラクタとデストラクタのコードは必要ないと思ったので書きません)

class MOJI
{
LPDIRECT3DTEXTURE9 lp3dtex9;
int width,height;
public:
MOJI(LPCWSTR moji,int height,LPCWSTR fontname);
~MOJI();
LPDIRECT3DTEXTURE9 GetTexture(void);
int GetLength(int);
};

これで、作成したインスタンスからlp3dtex9を呼び出すことが出来るので、
lp3dtex9は配列で管理する必要がなくなりました。

が、
作成したインスタンスはたくさんあるので、結局インスタンスを配列で管理するしかないのかなと
考えており、画像を指定する際には、moji[0]->lp3dtex9のようにまた配列を使って呼び出すしかない
状況になってしまっています。

私としてはインスタンス名を見るだけで何の文字、画像なのかが分かるようにしたいのですが、
何かいい方法はありますでしょうか?
インスタンス名を分かりやすい名前に変えるという方法以外の方法でお願い致します。

ちなみに現在は、以下のように配列で対応してます。
デストラクタでテクスチャが解放されるようにしています。

MOJI *moji[100];//グローバル変数


void TextureCreate(void)
{
moji[0] = new MOJI("あ",200,"MS 明朝");
moji[1] = new MOJI("い",200,"MS 明朝");



}

void TextureDelete(void)
{
for(int i=0;i<100;++1){
delete moji;
}
}

分かりにくいかもしれませんが、ご回答よろしくお願い致します。

Re:クラスの効率の良い使い方?について

Posted: 2010年7月17日(土) 00:17
by ISLe
GetTexture("ひらがな あ")
みたいにして生成したテクスチャを取得する仕組みを作ったらどうでしょう。
文字列からハッシュ値を生成してそれをキーにしたマップで管理。

余談ですが一文字ずつのテクスチャですか?
テクスチャの切り替えでそうとう描画が遅くなると思いますけど。

Re:クラスの効率の良い使い方?について

Posted: 2010年7月17日(土) 00:38
by シエル
ISLeさん。ありがとうございます。

今まだ私はアルゴリズムの勉強中でハッシュ探索を知らなかったのですが、
ググってみると、かなり私が考えている理想に近いものでした。
一度ハッシュ探索で対応してみたいと思います。ありがとうございました。

>余談ですが一文字ずつのテクスチャですか?
>テクスチャの切り替えでそうとう描画が遅くなると思いますけど。

一文字ずつのテクスチャです。
私も毎回テクスチャを切り換える度に、SetTextureを呼び出す必要があるので、
遅くなるかなと思ってたのですが、一文字ずつ変化を付けて描画したいなと思ってたので一文字ずつ
のテクスチャにしました。
文字列で作成したテクスチャの場合に、一文字ずつ変化をつける方法がわからなかったものでして…

Re:クラスの効率の良い使い方?について

Posted: 2010年7月17日(土) 01:00
by めるぽん
(勉強のために自作するなら止めませんが)ハッシュマップを自分で正しく効率良く作るのは至難の業なので、
既存の unordered_map や hash_map、もしくはハッシュマップではなく std::map を使ってもいいかもしれません。
std::map なら標準で用意されてますし、文字列ならあまり考えることなくそれなりの効率で使えるはずです。

Re:クラスの効率の良い使い方?について

Posted: 2010年7月17日(土) 01:12
by シエル
ぬるぽんさんありがとうございます。
調べてみます。