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

White square in SFML, but texture is loading fine

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

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

这些 DBObjects 存储在 std::vector.

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

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

这叫做the white square problem

基本上,在某些时候,你的对象被复制了,但是复制构造函数没有更新复制的精灵纹理来使用复制的纹理,并且原始纹理被破坏所以复制的精灵没有有效的纹理了。例如,当您的 std::vector 需要分配更多内存和 move/copy 东西时,就会发生这种情况。