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) 绘制它时,它只绘制一个白色精灵

(图标是一个包含图像信息的结构。它只是我想使用的图像,它使用 GIMP 导出为 C 源)

我做了一些实验,意识到当我创建上述类成员不是作为类成员而是作为主函数中的局部变量时,图像被正确绘制......

但这对我没有帮助,因为我需要它们作为成员,因为我也想从其他功能访问它们

你能帮我吗,我只是不知道该怎么办了:(

4

1 回答 1

6

这称为白方块问题

基本上,在某些时候,您的对象被复制,但复制构造函数不会更新复制的精灵纹理以使用复制的纹理,并且原始纹理被破坏,因此复制的精灵不再具有有效的纹理。

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


顺便提一句

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);
于 2013-10-17T18:52:23.277 回答