所以我试图通过函数分配一个变量。函数中的代码通常存在于构造函数中,但是因为我不想在构造函数中为继承同一父代的所有类编写它,所以我创建了一个函数。
但该功能似乎无法正常工作或正确分配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 ++的经验不足以确定。环顾四周也没有给我一个答案。我希望这不是一个愚蠢的问题。如果您需要查看更多代码,请询问,如果有人可以提供帮助,那就太好了。)
答案 0 :(得分:1)
只要精灵存在,精灵就需要存在现有的纹理。一旦方法结束,sf::Texture holdtexture
将从内存中清除,因此它将显示一个白色方块。
我通过向实体类添加sf :: Texture并将该纹理指定给精灵来修复它。