我在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即可。

10-04 14:27