sf::Texture作为类成员无法工作?

4

嗨,我想在我的SFML应用程序中绘制一个精灵,但当我使用一个作为类成员的图像和纹理时,它的纹理始终是白色。

类成员:

sf::Sprite myimg;
sf::Image myimg_image;
sf::Texture myimg_texture;

当我在我的Cpp文件中像这样创建精灵时
// create image
myimg_image.create(icon.width, icon.height, icon.pixelData);

// create texture from image
myimg_texture.create(icon.width, icon.height);
myimg_texture.update(myimg_image);

// apply texture to sprite
myimg.setTexture(myimg_texture);

当我使用window.draw(myimg)绘制时,它只会绘制一个白色的精灵。(icon是一个包含图像信息的结构体..它只是我想要用GIMP导出为C源代码的图像)
我做了一些实验,发现当我将上述类成员作为局部变量在主函数中创建时,图像可以正确地被绘制...
但这对我没有帮助,因为我需要它们作为成员,以便我也可以从其他函数中访问它们。
你能帮帮我吗?我真的不知道该怎么办了:(
1个回答

6

这被称为白色方块问题

基本上,在某个时刻,您的对象被复制,但是复制构造函数没有更新复制的精灵纹理以使用复制的纹理,而原始纹理被销毁,因此复制的精灵不再具有有效的纹理。

一个快速解决方法可以简单地在复制构造函数和复制赋值运算符中运行初始化代码。


BTW

myimg_texture.create(icon.width, icon.height);
myimg_texture.update(myimg_image);

你可以直接使用icon.pixelData代替myimg_image,这样你根本不需要sf::Image。如果你需要sf::Image用于其他目的,也可以按照以下方式操作:
myimg_texture.loadFromImage(myimg_image);

谢谢您的回复!我实际上只是编写了一个包含所有资源的类。现在没有纹理会丢失,一切都正常工作!此外,感谢您给我的其他信息。我不再需要使用sf :: Image了。谢谢! - A. D.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接