目前,我正在使用rust-sfml
( rsfml::graphics
) 将像素绘制到屏幕上。(我只是从 Rust 和项目开始。)我将数据存储在一个 中Image
,然后复制到一个Texture
.
这Texture
用于创建一个Sprite<'s>
; 这就是我的问题。我需要能够改变Texture
,但 的类型Sprite<'s>
似乎保证我不能做我想做的事。window.draw(&sprite)
由于每次重绘窗口时我都需要能够调用,所以我Sprite
每次都创建一个新的。
更可取的选择是将 与一起保留Sprite<'s>
在 my中。由于'Sprite'有一个生命周期参数,它变成:struct Render
Texture
struct 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) -> () { }
}
(如果问题不清楚,请道歉。当我对这些概念不太熟悉时,很难表达。)