Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Canvas 如何使SDL(2)在调整大小时刷新convas内容?_Canvas_Rust_Sdl_Sdl 2_Redraw - Fatal编程技术网

Canvas 如何使SDL(2)在调整大小时刷新convas内容?

Canvas 如何使SDL(2)在调整大小时刷新convas内容?,canvas,rust,sdl,sdl-2,redraw,Canvas,Rust,Sdl,Sdl 2,Redraw,(前提:(伪)代码是Rust的,但是,任何语言的答案都可以接受,因为Rust SDL库与标准库非常相似) 我有一个非常小的SDL2模板,当我需要绘制图像、显示它(在最大化的窗口中)并等待按键时,我会使用它 然而,当前的逻辑是可行的,它有一个小问题:在窗口最大化(并且画布更新)之后,如果我调整窗口的大小,就不会重新绘制 这是我当前的伪代码: 让sdl_context=sdl2::init().unwrap(); let window=sdl\u上下文 .video() .unwrap() .win

(前提:(伪)代码是Rust的,但是,任何语言的答案都可以接受,因为Rust SDL库与标准库非常相似)

我有一个非常小的SDL2模板,当我需要绘制图像、显示它(在最大化的窗口中)并等待按键时,我会使用它

然而,当前的逻辑是可行的,它有一个小问题:在窗口最大化(并且画布更新)之后,如果我调整窗口的大小,就不会重新绘制

这是我当前的伪代码:

让sdl_context=sdl2::init().unwrap();
let window=sdl\u上下文
.video()
.unwrap()
.window(“窗口标题”,宽度为u32,高度为u32)
.最大化()
.position_居中()
.可调整大小()
.build()
.unwrap();
让mut event_pump=sdl_context.event_pump().unwrap();
让mut canvas=window.into_canvas().present_vsync().build().unwrap();
canvas.set_logical_size(640480).unwrap();
//需要重新绘制,因为上面的窗口已最大化。
//
事件泵。泵事件();
////////////////////////////////////////
//这里画了一些像素。
////////////////////////////////////////
canvas.present();
//等待按键或退出事件。
//
用于事件泵中的事件。等待{
比赛项目{
Event::KeyDown{..}=>std::process::exit(0),
Event::KeyUp{..}=>std::process::exit(0),
事件::退出{..}=>std::进程::退出(0),
_ => {}
}
}
如果我运行此代码,在不按任何键(或退出)的情况下调整窗口大小,画布不会重新绘制

我应该如何更改代码以使其重新绘制

(请注意,我没有使用纹理,因为它们使代码更加复杂,在我使用此模板的情况下,速度不是一个问题,或者没有可测量的速度改进)

有一个事件,因此以下应该可以工作(未经测试):


重画是否意味着我需要保留待绘制图像的内部副本?或者有一个SDL函数需要刷新?你需要保留一份图像的副本,或者考虑到新窗口的大小重新进行绘图操作;这是我想避免的,但事实证明这是必要的。谢谢
for event in event_pump.wait_iter() {
    match event {
        Event::KeyDown { .. } => std::process::exit(0),
        Event::KeyUp { .. } => std::process::exit(0),
        Event::Quit { .. } => std::process::exit(0),
        Event::WindowEvent (WindowEvent::Resized (w, h)) => unimplemented!(), // Redraw the window
        _ => {}
    }
}