问题描述
sdl2::video::Window::surface
需要对事件泵的可变引用,但是当我遍历sdl2::EventPump::wait_iter()
给出的事件时,事件泵被阻止了。
复制步骤:
创建一个新的货运项目:
$ cargo new foo
$ cd foo
$ echo 'sdl2 = "0.34.3"' >> Cargo.toml
用以下命令替换src / main.rs:
extern crate sdl2;
use sdl2::event::Event;
use sdl2::event::EventType;
pub fn main() {
let sdl_context = sdl2::init().unwrap();
let video_subsystem = sdl_context.video().unwrap();
let window = video_subsystem.window("foo",600,600).build().unwrap();
let mut event_pump = sdl_context.event_pump().unwrap();
for event in event_pump.wait_iter() {
let mut wsuf = window.surface(&event_pump).unwrap();
}
}
不使用迭代器是一种解决方法。所以这个main.rs会做同样的事情,但是这个会编译:
use sdl2::event::Event;
use sdl2::event::EventType;
pub fn main() {
let sdl_context = sdl2::init().unwrap();
let video_subsystem = sdl_context.video().unwrap();
let window = video_subsystem.window("foo",600).build().unwrap();
let mut event_pump = sdl_context.event_pump().unwrap();
loop {
let event = event_pump.wait_event();
let mut wsuf = window.surface(&event_pump).unwrap();
}
}
这感觉不太习惯。
我看不到sdl2::video::Window::surface
借用事件泵的原因,尤其是在函数忽略该参数的情况下。 Take a look at the sdl2::video::Window::surface source code
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)