使用框架绘制精灵时的C ++ Sfml白色方块

时间:2019-02-11 12:37:27

标签: c++ sfml

我正在制作一个sfml框架,该框架中有一个makeSpr()函数。该函数具有在其内部创建精灵的常规代码,但是绘制了一个白色正方形。我在另一个精灵上使用了纹理,该精灵未使用该函数绘制。正常绘制。

makeSpr()函数:

sf::Sprite makeSpr(sf::Texture tex, int x,int y, int sizeX,int sixeY) {
    sf::Sprite spr;
    spr.setTexture(tex);
    spr.setScale(sizeX,sizeY);
    spr.setPosition(x,y);
    return spr;
}

使用makeSpr将其分配给Sprite():

sf::Sprite sprTest = makeSpr(texTxtBox, 100,100, 5,5);

在window.clear()和window.diplay()之间的主循环中绘制子画面

window.draw(sprTest);

如果我在没有框架的情况下正常绘制纹理,效果很好。

sf::Sprite sprTxtBox;
sprTxtBox.setTexture(texTxtBox);

1 个答案:

答案 0 :(得分:3)

通过常量引用传递tex

sf::Sprite makeSpr(const sf::Texture& tex, int x,int y, int sizeX,int sixeY)

当您编写sf::Sprite makeSpr(sf::Texture tex, ...并调用sf::Sprite sprTest = makeSpr(texTxtBox, ...时,tex实际上是texTxtBox的副本,它在{{1}中的return spr;之后是免费的},因此您的makeSpr现在具有无效的纹理(已被破坏),因此仅绘制白色。您想要的是通过传递(const)引用来传递spr本身,并且您必须确保texTxtBox过期texTxtBox