2012-07-23 43 views
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), ???, ???)); 

基本上,我有不知道如何將多個單個項目放入矢量數組的參數列表中。第二個問題是需要在一組參數中創建兩個列表。

所以我的問題是:什麼應該取代「???」在上面的聲明中的字段?或者,如果失敗了,我應該用什麼方法來存儲這些基本定義? (爲了清楚起見,紋理的指針實際上與上面的網格相同,而「能力」只是短整數。儘管應該注意的是,對於這些定義,網格和紋理都可以用他們的枚舉,而不是指針)

+0

如果您爲使用的編程語言和API添加了標籤,這將有所幫助。 – 2012-07-23 18:05:02

+0

增加:) 我的不好 – user1539405 2012-07-24 02:04:02

+0

你真的需要指針嗎? – 2012-07-24 06:14:33

回答

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函數代替構造函數?

+0

我猜如果我想從文件加載這些定義,我需要矢量建立功能。 我可能會在全局函數上使用構造函數。上面的代碼主要是爲了展示問題。 謝謝你的回覆。我可能會將網格和紋理更改爲與Assets中的數組位置有關的短褲,並通過適當的函數爲紋理和功能創建兩個短的int向量。再次感謝你 :) – user1539405 2012-07-24 14:47:09

相關問題