【问题标题】:sf::Texture as class member doesn't work?sf::Texture 作为类成员不起作用?
【发布时间】:2013-10-26 02:04:58
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c++ image textures sprite sfml


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复!我实际上只是写了一个包含我所有资源的类。现在纹理不再丢失,一切正常!另外,感谢您提供给我的其他信息。我不再需要使用 sf::Image 了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 2012-01-23
    • 1970-01-01
    • 2013-03-08
    相关资源
    最近更新 更多