0x01. 使用 SDL2 创建一个窗口

1,499 阅读1分钟

之前已经把代码上传到 git 托管平台, 现在开始编码工作吧.

从入口开始

直接在 main 函数写东西, 写好再组织一下代码. 写代码之前, 先创建个分支, 尽量不要在主分支上改东西.

git checkout -b create-a-window

use self::time::Duration;
use sdl2::pixels::Color;
use std::{thread, time};

fn main() {
    let sdl2_context = sdl2::init().unwrap();
    let video = sdl2_context.video().unwrap();
    let window = video
        .window("Arcade Shooter", 800, 600)
        .position_centered()
        .opengl()
        .build()
        .unwrap();
    let mut canvas = window.renderer().accelerated().build().unwrap();
    canvas.set_draw_color(Color::RGB(0, 0, 0));
    canvas.clear();
    canvas.present();
    thread::sleep(Duration::from_millis(10000));
}

现在是创建了一个窗口, 还让窗口显示了 10 秒.

代码解读

因为现在用的 Rust 版本是 2018 edition, 如果是旧版本需要使用 extern crate sdl2 引入 sdl2 模块, 新版真是提高开发体验, 直接 use sdl2 就能使用 sdl2. 主函数进去之后, 通过 sdl2init 函数得到初始化得到一个 Result<Sdl, String>, 通常情况下, 直接 unwrap 拿到 Sdl 实例就可以了, 也可以使用 expect 传入一个错误情况的提示字符串切片, 这是我们后面要使用 sdl 的开端. 后面的都很好理解, 通过 Sdl 实例的 video 函数来初始化 video subsystem, 再用这个实例来调用 window 函数创建窗口构建器, 配置窗口居中, 配置 OpenGL 支持, 最后构建出一个窗口. 其实这段代码就是一个 hello world 性质的东西.


这一节应该是很简单的, 就是翻文档性质的工作.