我在C ++ / DirectX中创建一个游戏,遇到存储精灵的问题。目前,我可以创建一个sprite,然后将其存储在矢量中,对于一个sprite来说,这样做是完美的。但是,当我插入另一个精灵时,前一个精灵的texture属性将被删除。我将提供一些断点的屏幕快照和一些代码。
我怀疑的问题是,该对象没有被放置到向量中,而是依赖于用于创建子画面的临时对象。以下是一些屏幕截图:
https://www.dropbox.com/s/g5xdlaqf35w6q57/1.png
https://www.dropbox.com/s/xmcyv611nqc27xc/2.png
和一些代码:
// d2World.h
class d2World
{
public:
// Some functions
vector<d2Sprite> spritesList;
// More stuff
private:
d2Sprite *tempSprite;
// Other private variables
};
// d2World.h
// Some other functions
// A new object is created by re-assigning it
tempSprite = new d2Sprite();
// When a the sprite is completed, add it to the vector
spritesList.push_back(*tempSprite);
// More stuff here
我不明白的是为什么仅纹理属性受到影响?
谢谢你的帮助。
编辑:
这是
d2Sprite
类的标题代码:class d2Sprite
{
public:
d2Sprite(void);
~d2Sprite(void);
void Load(LPDIRECT3DTEXTURE9 tex);
void Position(int x, int y);
int x, y, frame, frameW, frameH, columns;
float Rotation;
D3DXVECTOR3 GetPosition();
D3DXVECTOR2 Scale;
D3DXVECTOR2 Center;
D3DXVECTOR2 Translation;
LPDIRECT3DTEXTURE9 texture;
D3DCOLOR colour;
};
最佳答案
您正在创建d2Sprite的副本,而LPDIRECT3DTEXTURE9似乎是一个指针...
spritesList.push_back(*tempSprite);
为什么要用new创建d2Sprite,然后将其复制到向量,您可能应该有一个
vector<d2Sprite*> spritesList;
并将指针复制到向量
spritesList.push_back(tempSprite);
然后,当您不再需要引导程序中的项目时,调用delete即可。