嘿,我想在我的 SFML 应用程序中绘制一个 Sprite ,但是当我使用作为类成员的图像和纹理时,它的纹理总是白色
类(class)成员:
sf::Sprite myimg;
sf::Image myimg_image;
sf::Texture myimg_texture;
当我在我的 cpp 文件中创建这样的 Sprite 时
// 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) 绘制它时它只绘制一个白色 Sprite
(图标是一个包含图像信息的结构。它只是我想使用的图像,用 GIMP 导出为 C 源)
我做了一些实验,发现当我创建上面提到的类成员而不是作为类成员而是作为主函数中的局部变量时,图像绘制正确...
但这对我没有帮助,因为我需要它们作为成员,因为我也想从其他功能访问它们
你能帮帮我吗,我只是不知道该怎么办了:(
最佳答案
这叫做 the white square problem .
基本上,在某些时候,您的对象已被复制,但复制构造函数不会更新复制的 Sprite 纹理以使用复制的纹理,并且原始纹理被破坏,因此复制的 Sprite 不再具有有效纹理。
快速修复可以简单地在复制构造函数和复制赋值运算符中运行初始化代码。
顺便说一句
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);
关于c++ - sf::Texture 作为类成员不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19429155/