变量不通过低谷(可能是范围结束)

时间:2016-07-12 15:48:40

标签: c++ scope sfml

所以我试图通过函数分配一个变量。函数中的代码通常存在于构造函数中,但是因为我不想在构造函数中为继承同一父代的所有类编写它,所以我创建了一个函数。

但该功能似乎无法正常工作或正确分配vallue。

这是构造函数中的代码:

sf::Texture holdTexture;
sf::Sprite holdSprite;

Wolf::Wolf(float speed, Player& p) :
    Monster(speed, p)
{   
    holdTexture.loadFromFile("Assets\\Wolf.png");
    sprite.setTexture(holdTexture);
    sprite.setOrigin(24,22);
}

精灵值在名为Entity.h的父父父母中声明

class Entity {
public:
    Entity();
    sf::Sprite sprite;
public:
    sf::Vector2f getEntityCoords();
protected:
    void loadSprite(const std::string &filename);
};

具有以下功能:

void Entity::loadSprite(const std::string &filename) {
    sf::Texture holdTexture;
    holdTexture.loadFromFile(filename);
    sprite.setTexture(holdTexture);
}

所以现在我的构造函数看起来像:

Wolf::Wolf(float speed, Player& p) :
    Monster(speed, p)
{   
    loadSprite("Assets\\Wolf.png");
}

Wolf来自Monster。怪物来自实体。对loadSprite的调用有效。

但现在精灵变成了一个白色的盒子。正如标题所说,这可能是范围问题的终结,但我对c ++的经验不足以确定。环顾四周也没有给我一个答案。我希望这不是一个愚蠢的问题。如果您需要查看更多代码,请询问,如果有人可以提供帮助,那就太好了。)

1 个答案:

答案 0 :(得分:1)

只要精灵存在,精灵就需要存在现有的纹理。一旦方法结束,sf::Texture holdtexture将从内存中清除,因此它将显示一个白色方块。

我通过向实体类添加sf :: Texture并将该纹理指定给精灵来修复它。