我希望在类中有一个sf :: Texture(sfml)数组,然后想要一个函数返回一个指向数组(向量)中特定项的指针。 然后我想将它传递给sprite.SetTexture(也是SFML),它需要一个sf :: texture。 但我无法让它发挥作用,这就是我现在所拥有的,我留下了不重要的东西:
class SpriteTextures
{
public:
std::vector<sf::Texture> Textures;
//code to fill the vector here
sf::Texture *GetSecondTexture()
{
return &Textures[1];
}
};
class DrawSprite
{
sf::Texture *texture;
sf::Sprite sprite;
public:
void SetSpriteTexture()
{
SpriteTextures SprTexs;
texture = SprTexs.GetSecondTexture();
sprite.setTexture(texture, true); // Gives error about no suitable constructor exists to convert from sf::Texture * to sf::Texture
// do some other stuff with the texture here.
}
};
这是Sprite :: setTexture的函数defenition:
void setTexture(const Texture& texture, bool resetRect = false);
它给出的错误我把它作为注释放在代码中(在setTexture函数旁边) 所以我想要的是,不是将矢量项的副本复制到DrawSprite类中的纹理var,而是希望DrawSprite中的*纹理指向矢量中的项。 但我确实想先在DrawSprite中设置*纹理,因为我也想将它用于其他事情。 所以我希望能够为我的*纹理提供setTexture函数,并让它在SpriteTextures类的向量中读取sf :: Texture。(而不是在DrawSprite类本身的纹理变量中读取它的副本。
如果有人理解我刚才说的话,有人可以帮助我让它正常工作吗?
谢谢!
答案 0 :(得分:2)
基本上,在这个功能中:
void SetSpriteTexture()
{
SpriteTextures SprTexs;
texture = SprTexs.GetSecondTexture();
sprite.setTexture(texture, true); // Gives error about no suitable constructor exists to convert from sf::Texture * to sf::Texture
// do some other stuff with the texture here.
}
您将sf::Texture*
传递给sprite.setTexture(..)
,而实际上需要sf::Texture&
。只需将呼叫更改为:
sprite.setTexture(*texture, true);
或者,让你的其他函数只返回一个引用:
sf::Texture& GetSecondTexture()
{
return Textures[1];
}
这意味着您现在正在返回默认情况下精灵所需的内容。当然,您必须确保纹理容器至少与您的精灵一样保持活动状态,否则纹理参考将不再有效。
修改强>
另外,看一下评论,您似乎对*
运算符和&
运算符感到有些困惑。这是一个快速片段,用于解释这些运算符的各种用例:
int a = 42;
int* b = &a; // * Declares pointer. & Takes address of a
int& c = a; // & Declares reference.
*b = 32; // * Dereferences the pointer, meaning you get the value it points to.
// a, and c are now 32, and b points to a, which holds the value 32.