目前,我正在使用rust-sfml( rsfml::graphics) 将像素绘制到屏幕上。(我只是从 Rust 和项目开始。)我将数据存储在一个 中Image,然后复制到一个Texture.
这Texture用于创建一个Sprite<'s>; 这就是我的问题。我需要能够改变Texture,但 的类型Sprite<'s>似乎保证我不能做我想做的事。window.draw(&sprite)由于每次重绘窗口时我都需要能够调用,所以我Sprite每次都创建一个新的。
更可取的选择是将 与一起保留Sprite<'s>在 my中。由于'Sprite'有一个生命周期参数,它变成:struct RenderTexturestruct Render<'s>
struct Render<'s> {
texture: Texture,
sprite: Sprite<'s>,
}
我有一个方法Render:
fn blit(&'s mut self) -> ()
它改变了Render(通过编辑Texture)。现在,只要我尝试blit多次调用,就会遇到这个问题:
render.blit();
render.blit(); // error: cannot borrow `render` as mutable more than once at a time
我认为,之所以会发生这种情况,是因为生命周期参数强制第一个Render调用blit的生命周期等于Render实例的生命周期(整个主函数)。
我怎样才能保留我的原件Sprite并继续能够改变容器?可能吗?
这是一个看起来很愚蠢且相当简单的示例:
extern crate rsfml;
use rsfml::graphics::Sprite;
fn main() -> () {
let mut render = Render::new();
render.blit();
render.blit(); // error: cannot borrow `render` as mutable more than once at a time
}
struct Render<'s> {
sprite: Option<Sprite<'s>>,
}
impl<'s> Render<'s> {
fn new() -> Render { Render { sprite: None } }
fn blit(&'s mut self) -> () { }
}
(如果问题不清楚,请道歉。当我对这些概念不太熟悉时,很难表达。)