SFML中的白色方块,但纹理加载正常

时间:2016-07-25 08:21:44

标签: c++ scope sprite sfml

我有一个存储mediasf::Sprite)和mediaTexturesf::Texture)的DBObject。这是我的DBObject::loadMedia()函数:

void DBObject::loadMedia() {
    myStream mediaStream(mediaPath);
    mediaTexture.loadFromStream(mediaStream);
    media.setTexture(mediaTexture);
    mediaInit = true;
}

这些DBObject存储在std::vector

当我尝试将精灵绘制到显示器时,它是完全白色的,显然这是来自纹理超出范围。但是我在DBObject中定义了纹理,所以它应该具有对象的生命周期......对吗?

但是,当我在main()函数中创建一个新的sprite,并且执行newSprite.setTexture(DBObj.mediaTexture)时,它显示正常,因此纹理本身加载正常,但精灵正在发生一些事情。

1 个答案:

答案 0 :(得分:1)

这称为the white square problem

基本上,在某些时候,您的对象被复制,但复制构造函数不会更新复制的精灵纹理以使用复制的纹理,并且原始纹理被破坏,因此复制的精灵不再具有有效纹理。例如,当std::vector需要分配更多内存并移动/复制内容时,就会发生这种情况。