gpt4 book ai didi

c++ - sf::Sprite 是白色矩形(纹理试图通过引用传递)

转载 作者:行者123 更新时间:2023-11-28 01:43:21 24 4
gpt4 key购买 nike

这是resources.h:

extern sf::Sprite Sprite00;

void load_sprite(sf::Sprite &externalSprite, sf::Texture &externalTexture) ;
void draw_sprite(sf::RenderWindow &window, sf::Sprite &externalSprite);
void setposition_sprite(sf::Sprite &externalSprite, float x, float y);

这是resources.cpp:

sf::Sprite Sprite00;


void load_sprite(sf::Sprite &externalSprite, sf::Texture &externalTexture)
{
externalSprite.setTexture(externalTexture);
}
void draw_sprite(sf::RenderWindow &window, sf::Sprite &externalSprite)
{
window.draw(externalSprite);
}
void setposition_sprite(sf::Sprite &externalSprite, float x, float y)
{
externalSprite.setPosition(x, y);
}

void loadResources()
{
sf::Texture myTexture;
myTexture.loadFromFile("images/block3d.png");

load_sprite(Sprite00, myTexture);
}

game.cpp中:

void Game::render()
{
window.clear();

setposition_sprite(Sprite00, 100, 100);
draw_sprite(window, Sprite00);

window.display();
}

显示的 Sprite 是白色矩形,纹理丢失。我不知道如何解决它。我猜我没有正确传递引用。

loadResources 在 main.cpp 中被调用。例如,我想在函数 Game::render(); 的 game.cpp 中显示此 Sprite00。另外,如果我想在另一个 cpp 的其他地方显示它,我应该怎么做才能使它正确?

最佳答案

sf::Sprite 存储指向您提供的纹理的指针。但是在您的 loadResources 函数中,您正在创建一个本地 sf::Texture 对象,并将其应用于您的 Sprite 。当函数返回时,纹理被销毁,你的 Sprite 留下一个悬垂的指针。您需要确保纹理的生命周期至少包括您使用 Sprite 的持续时间。

请注意 the documentation 中对 sf::Sprite 类的描述有一段警告你正在做什么:

It is important to note that the sf::Sprite instance doesn't copy the texture that it uses, it only keeps a reference to it. Thus, a sf::Texture must not be destroyed while it is used by a sf::Sprite (i.e. never write a function that uses a local sf::Texture instance for creating a sprite).

关于c++ - sf::Sprite 是白色矩形(纹理试图通过引用传递),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46269357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com