SFML 中的白色方块,但纹理加载正常
White square in SFML, but texture is loading fine
我有一个存储 media
(sf::Sprite
)和 mediaTexture
(sf::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 发生了一些事情。
基本上,在某些时候,你的对象被复制了,但是复制构造函数没有更新复制的精灵纹理来使用复制的纹理,并且原始纹理被破坏所以复制的精灵没有有效的纹理了。例如,当您的 std::vector
需要分配更多内存和 move/copy 东西时,就会发生这种情况。
我有一个存储 media
(sf::Sprite
)和 mediaTexture
(sf::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 发生了一些事情。
基本上,在某些时候,你的对象被复制了,但是复制构造函数没有更新复制的精灵纹理来使用复制的纹理,并且原始纹理被破坏所以复制的精灵没有有效的纹理了。例如,当您的 std::vector
需要分配更多内存和 move/copy 东西时,就会发生这种情况。