c++ - sf::Texture 作为类成员不起作用?

标签 c++ image textures sprite sfml

嘿,我想在我的 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/

相关文章:

c++ - 如何使用 BlueZ 获取 RSSI?

javascript - 有没有办法在不刷新页面的情况下上传和预览 div 上的图像(替换背景图像)?

android - 在 Android 上将位图压缩为 ASTC 运行时

textures - HLSL tex2D() - 梯度从何而来?

javascript - 使图像随机 move onclick

javascript - 如何将多个纹理发送到 WebGL 中的片段着色器?

c++ - 无法使用 MSXML6 加载带有 UTF-8 BOM 标记的 XML 文件

c++ - 重载运算符问题 C++

c++ - 模数公式

java - 创建具有多个图像的 JPanel