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

问题描述 投票:2回答:1

我正在制作一个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.display()之间的主循环中绘制sprite

window.draw(sprTest);

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

sf::Sprite sprTxtBox;
sprTxtBox.setTexture(texTxtBox);
c++ sfml
1个回答
3
投票

通过const引用传递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的副本,并且它在return spr;中的makeSpr之后获得自由,因此你的spr现在具有无效纹理(已经被破坏),因此它仅绘制白色。你想要的是传递texTxtBox本身,通过(const)引用,你必须确保texTxtBox超出sprTest

© www.soinside.com 2019 - 2024. All rights reserved.