我有一个存储media
(sf::Sprite
)和mediaTexture
(sf::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)
时,它显示正常,因此纹理本身加载正常,但精灵正在发生一些事情。
答案 0 :(得分:1)
基本上,在某些时候,您的对象被复制,但复制构造函数不会更新复制的精灵纹理以使用复制的纹理,并且原始纹理被破坏,因此复制的精灵不再具有有效纹理。例如,当std::vector
需要分配更多内存并移动/复制内容时,就会发生这种情况。