#窗口化 #wolf-engine #gamedev #游戏引擎

wolf_engine_window

一个简单、高级的视频游戏窗口API

3个版本 (破坏性)

新功能 0.3.0 2024年8月12日
0.2.0 2024年7月25日
0.1.0 2024年7月10日

#1009 in 游戏开发

Download history 108/week @ 2024-07-09 148/week @ 2024-07-23 8/week @ 2024-07-30

每月264次下载

MIT/Apache

39KB
808 代码行

狼引擎窗口

Crates.io Crates.io

提供基于Winit构建的简单、高级窗口系统。

状态

该软件包目前处于早期开发阶段。您应该期待缺少功能、错误、更改API和其他令人不安的东西,直到1.0版本发布。

许可证

狼引擎许可采用以下之一:

任选其一。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交以包含在作品中并由您提交的任何贡献,均应双许可,无额外条款或条件。


lib.rs:

提供简单、高级的窗口系统。

初始化窗口系统

通过调用[init()]函数来初始化窗口系统。

let window_context = wolf_engine_window::init().build().unwrap();

一旦创建了EventLoop,您就可以调用其run()方法,使用提供的事件处理函数启动窗口系统。

处理事件和创建窗口

#
#
let mut window = None;
window_context.run(|event, context| match event {
    // The main-loop has started.
    // Do intial setup, like creating windows, render surfaces, ext. here.
    Event::Started => {
        println!("Hello, world!");
        window = Some(
            context.create_window(
                WindowSettings::default()
                    .with_title("Example Window")
                    .with_size((800, 600)),
            ).unwrap()
        );
    }
    // All events have been processed.
    Event::EventsCleared => {
        // Start the next frame.
        window.as_ref().unwrap().redraw();
    }
    // Window-specific events.
    Event::WindowEvent(window_id, event) => match event {
        // A window should be redrawn.
        WindowEvent::RedrawRequested => {
            // Render code goes here!
        },
        // A window has / should close.
        WindowEvent::Closed => {
            context.exit(); // Stop the event loop.
        }
        _ => (),
    }
    // The main-loop will stop.
    Event::Exited => println!("Goodbye, World!"),
    _ => (),
});

在窗口上绘图

此软件包不提供自己的渲染函数。相反,它实现了raw_window_handle特质,以便与外部渲染库兼容。

依赖关系

~3–17MB
~247K SLoC