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

A. *_* D. 4 c++ textures image sprite sfml

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

班级成员:

sf::Sprite myimg;
sf::Image myimg_image;
sf::Texture myimg_texture;
Run Code Online (Sandbox Code Playgroud)

然后我在我的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);
Run Code Online (Sandbox Code Playgroud)

当我用window.draw(myimg)绘制它时,它只绘制一个白色精灵

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

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

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

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

Hiu*_*ura 6

这被称为白方问题.

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

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


BTW

myimg_texture.create(icon.width, icon.height);
myimg_texture.update(myimg_image);
Run Code Online (Sandbox Code Playgroud)

可以直接使用icon.pixelData而不是,myimg_image因此你根本不需要sf::Image.

或者,如果您需要sf::Image用于其他目的,您可以按照以下步骤操作:

myimg_texture.loadFromImage(myimg_image);
Run Code Online (Sandbox Code Playgroud)