创建“项目”定义

时间:2012-07-23 17:53:57

标签: c++ vector parameters directx game-engine

我正在尝试为使用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), ???, ???));

基本上,我不知道如何将多个单项放入矢量数组的参数列表中。第二个问题是需要在一组参数中创建两个列表。

所以我的问题是:什么应该取代“???”上面那个陈述中的字段?或者,如果失败了,我应该使用什么更好的方法来存储这些基本定义?

(为了清楚起见:纹理的指针几乎与上面的网格相同,“能力”只是短的内容。虽然应该注意,对于这些定义,网格和纹理都可以用它们替换枚举而不是指针)

1 个答案:

答案 0 :(得分: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;
}

或者你可以写一些构建并返回向量的函数。

PS:为什么使用一些全局NewItem - 函数而不是构造函数?