0

DirectXを使用してC++で作成している小さなゲームの基本アイテムを定義するための良い方法を考えようとしています。現在、構造は次のようになります。

struct itemdef {
    string name;
    ID3DXMesh* mesh;
    vector<IDirect3DTexture9*> textures;
    vector<short> abilities;
};

私が抱えている問題は、基本的に、テクスチャや能力の上限を作成せずに、これらの基本プロパティの配列を作成したいということです。

基本的に、「itemdef」の別の配列があると想像してください

vector<itemdef> itemDefs;

次に、ハードコードされた、またはファイルから、この配列にアイテムを追加します。

itemDefs.push_back(NewItem("Wall", Assets.GetMesh(Mesh_Wall), ???, ???));

基本的に、ベクトル配列のパラメータリストに複数の単一アイテムを入れる方法がわかりません。2番目の問題は、1セットの引数に2つのリストを作成する必要があることです。

だから私の質問は:「???」を何に置き換えるべきか 上記のステートメントのフィールド?または、それが失敗した場合、これらの基本的な定義を保存するためにどのようなより良い方法を使用する必要がありますか?

(わかりやすくするために、テクスチャのポインタは上記のメッシュとほぼ同じ方法で取得され、「能力」は短い整数です。ただし、これらの定義では、メッシュとテクスチャの両方を、ではなく列挙に置き換えることができることに注意してください。ポインタ)

4

1 に答える 1

0

最初にベクトルをローカル変数として作成し、次にそれらをアイテムコンストラクターに送信します。

vector<IDirect3DTexture9*> tex;
vector<short*> abil;
// fill them with the data you need
itemDefs.push_back(NewItem("Wall", Assets.GetMesh(Mesh_Wall), tex, abil));

itemdef NewItem(const string& name, ID3DMesh* mesh, const vector<IDirect3DTexture9*>& textures, const vector<short*>& abilities)
{
  itemdef retval;
  retval.name = name;
  retval.mesh = mesh;
  retval.textures = textures;
  retval.abilities = abilities;
  return retval;
}

または、ベクトルを作成して返す関数を作成することもできます。

NewItemPS:コンストラクターの代わりにグローバル関数を使用するのはなぜですか?

于 2012-07-24T06:23:39.610 に答える