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), ???, ???));

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

所以我的问题是:应该用什么来代替“???” 上述声明中的字段?或者,如果做不到这一点,我应该使用什么更好的方法来存储这些基本定义?

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

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;
}

或者,您可以编写一些函数来构建并返回向量。

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

于 2012-07-24T06:23:39.610 回答