- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
sfml sprite 类 .setTexure() 方法在迭代器的构造函数内部不起作用,但在已经创建迭代器时起作用
我们正在尝试为正在绘制到窗口上的框架构建结构。我们正在使用 sfml 库及其 Sprite 和纹理类。在 frameData 结构的构造函数中,我们从文件中加载纹理,然后使用 .setTexture() 方法将其应用于 Sprite 。当我们编译和运行我们的程序时,我们要么得到白 block ,要么程序崩溃,这取决于机器。
如果我们在 frameData 的构造函数之外使用 .setTexture() 创建对纹理的指针引用,它就可以工作!
如果这是一个遍历不同帧的迭代器结构,则全部。这是相关代码,首先这是在 FrameData 结构的 header 中:
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);
}
关于为什么会发生这种情况的任何想法,我们是否遗漏了什么?我们希望构造函数正常工作,当前帧的返回比纹理更改的频率要高得多,因此我们不需要在每次返回当前帧时都更新纹理。
谢谢!
最佳答案
已解决!阅读 sf::sprite 类文档的最后一段:
It is important to note that the sf::Sprite instance doesn't copy the texture that it uses, it only keeps a reference to it. Thus, a sf::Texture must not be destroyed while it is used by a sf::Sprite (i.e. never write a function that uses a local sf::Texture instance for creating a sprite).
因此,为此类范围之外的纹理创建一个存储库,然后传递引用就可以了,就像推荐的 strongdrink 一样!
关于c++ - 为什么类 .setTexure() 方法的行为不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11129167/
sfml sprite 类 .setTexure() 方法在迭代器的构造函数内部不起作用,但在已经创建迭代器时起作用 我们正在尝试为正在绘制到窗口上的框架构建结构。我们正在使用 sfml 库及其 Sp
我是一名优秀的程序员,十分优秀!