クラスの効率の良い使い方?について
Posted: 2010年7月16日(金) 22:33
いつもお世話になっております。シエルです。
ちょっと内容とタイトルとが合ってないかもしれませんが、
クラスの効率の良い使い方について、質問があります。
今まで画像を描画する際に、テクスチャの変数(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;
}
}
分かりにくいかもしれませんが、ご回答よろしくお願い致します。
ちょっと内容とタイトルとが合ってないかもしれませんが、
クラスの効率の良い使い方について、質問があります。
今まで画像を描画する際に、テクスチャの変数(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;
}
}
分かりにくいかもしれませんが、ご回答よろしくお願い致します。