0

私は SDL の小さなエンジン/ゲームで C++ を使用しており、すべてのオブジェクトが使用するテクスチャ/リソースを整理および維持するための最良の方法を見つけようとしています。

画面に表示されるものは何でも継承する RenderedObject という単純な基本クラスがあります。レンダリングされたオブジェクトには、複数のテクスチャとそれに関連付けられた SDL_surfaces があり、それらをつなぎ合わせてレンダリングします。

(たとえば、RenderedObject から継承するキャラクタ オブジェクトには、脚、胴体、および頭のサーフェス/テクスチャがある場合があります)

RenderedObject のさまざまな子には、各クラスに関連付けられたさまざまなテクスチャがあります。

これらのクラスには複数のインスタンスが存在するため、テクスチャの 1 つのコピーをロード/維持するだけでよいことは明らかであり、すべてのインスタンスがそのコピーへのポインタを持つことができます。

私はどの方法がそれを行うのが良いだろうかと思っています:

1) すべての画像の読み込みとレンダリングを行うグラフィック マネージャーがあるので、それを使用して、各オブジェクトのすべてのテクスチャの配列を保持できると考えていました。しかし、各 RenderedObject インスタンスからリンクする方法がよくわかりません。

理想的には、各インスタンスにポインターを与えるだけで、コンストラクターなどで次のようなものを呼び出すことができます。

this->textures = graphicManager.getTextures(this);

次に、graphicManager は、そのオブジェクトのすべてのテクスチャを含むある種の Texture オブジェクトを返すことができます。

このようにすると、オブジェクトポインターを直接渡して、グラフィックマネージャーに適切な情報を送り返すことができるようにする方法がわからないため、サブクラスごとに指定する必要がある何らかの列挙型または文字列を使用する代わりに、レンダリングされたオブジェクト。

2) 私が考えたもう 1 つの方法は、すべてのテクスチャをオブジェクトの静的メンバーにすることです。私は静的変数の使用にあまり慣れていません。それらの値はいつ初期化されますか? テクスチャのロードを行う前に SDL をロード/初期化する必要があるため

とにかく、結論として、RenderedObject の各サブクラスである種のポインタまたは参照をそのテクスチャに保持するための最良の方法を本当に探しています。

4

1 に答える 1