sf ::作为类成员的纹理不起作用?

时间:2013-10-17 14:14:42

标签: c++ image textures sprite sfml

Heyy,我想在我的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源的图像)

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

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

你可以帮助我,我只是不知道该怎么做:(

1 个答案:

答案 0 :(得分:6)

这称为the white square problem

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

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


顺便说一句

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);