sfml sprite 类 .setTexure() 方法在迭代器的构造函数中不起作用,但在迭代器已经生成时起作用
我们正在尝试为正在绘制到窗口上的框架构建结构。我们正在使用 sfml 库,以及它们的精灵和纹理类。在 frameData 结构的构造函数中,我们从文件加载纹理,然后使用 .setTexture() 方法将其应用于精灵。当我们编译和运行我们的程序时,我们会得到白块或程序崩溃,具体取决于机器。
如果我们在 frameData 的构造函数之外使用 .setTexture() 创建对纹理的指针引用,它就可以工作!
如果这是一个迭代器结构,它遍历不同的帧。这是相关代码,首先这是在 FrameData 结构的标头中:
private:
struct FrameData
{
FrameData(const std::string& fileName, int frameDelay);
sf::Texture texture;
sf::Sprite sprite;
unsigned int frameDelay;
};
其次,这是实际的构造函数,不起作用:
const sf::Sprite& SpriteAnimator::currentFrame() const
{
return currentFrame_->sprite;
}
SpriteAnimator::FrameData::FrameData(const std::string& fileName, int frameDelay)
: frameDelay(frameDelay)
{
texture.loadFromFile(fileName);
sprite.setTexture(texture);
}
第三,这是有效的:
const sf::Sprite& SpriteAnimator::currentFrame() const
{
currentFrame_->sprite.setTexture(currentFrame_->texture);
return currentFrame_->sprite;
}
SpriteAnimator::FrameData::FrameData(const std::string& fileName, int frameDelay)
: frameDelay(frameDelay)
{
texture.loadFromFile(fileName);
sprite.setTexture(texture);
}
关于为什么会发生这种情况的任何想法,我们是否遗漏了什么?我们想让构造函数正常工作,当前帧的返回频率要比纹理变化的频率高很多,所以我们不需要每次返回当前帧时都更新纹理。
谢谢!