介绍

我使用Rust和SDL2创建了一个游戏开发环境,所以我将介绍它。
最近,使用 Unreal Engine 和 Unity 等游戏引擎进行开发是主流。
我认为游戏编程对于研究内部运作和设计很有用。

什么是 SDL

SDL 代表 Simple DirectMedia Layer,是一个提供屏幕绘制、音频输出和按键输入等功能的库。
SDL 本身是用 C 编写的,但包装器可用于各种编程语言。
在 Rust 中,您可以使用 rust-sdl2 crate 来使用 SDL 功能。

设置

提前生锈安装收下。

以下是 Windows(64 位)的设置过程。

  1. 存储库的发布页面下载SDL2-devel-2.x.x-VC.zip并解压。

  2. 在展开的文件夹中打开 lib\x64 文件夹。
    有4个文件。

    Rust + SDL2でゲーム開発

  3. 将上面的文件复制到下面的路径。

    C:\Users\{USER_NAME}\.rustup\toolchains\{TOOLCHAIN}\lib\rustlib\{TOOLCHAIN}\lib
    
    • {USER_NAME} 替换为您的帐户名。

    • {TOOLCHAIN} 替换为您的工具链名称。
      通常看起来stable-x86_64-pc-windows-msvc
      如果没有对应的文件夹,检查工具链名称rustup show

    Rust + SDL2でゲーム開発

    设置现已完成。

    执行

    现在让我们实际运行代码。

    1. 创建一个新项目。

      $ cargo new sample_sdl2
      
    2. 将以下内容添加到sample_sdl2 内的Cargo.toml
      最新版本的 sdl2 是拿铁咖啡艾欧请与

      [dependencies]
      sdl2 = "0.32.0"
      
    3. 将代码输入main.rs 以执行以下操作:

      1. 初始化库显示
      2. 窗口
      3. 获取绘制屏幕的 Canvas 实例
      4. 在无限循环中执行以下操作
        1. 收到结束事件时退出循环
        2. 清屏
        3. 绘制矩形
        4. 刷新屏幕并等待
          矿。 rs
          use sdl2::event::Event;
          use sdl2::pixels::Color;
          use sdl2::rect::Rect;
          use std::time::Duration;
          
          pub fn main() {
              let sdl_context = sdl2::init().unwrap();
              let video_subsystem = sdl_context.video().unwrap();
              let window = video_subsystem
                  .window("Rust-SDL2", 800, 600)
                  .position_centered()
                  .build()
                  .unwrap();
              let mut canvas = window.into_canvas().build().unwrap();
              let mut event_pump = sdl_context.event_pump().unwrap();
              'running: loop {
                  for event in event_pump.poll_iter() {
                      match event {
                          Event::Quit { .. }
                          | Event::KeyDown {
                              keycode: Some(Keycode::Escape),
                              ..
                          } => break 'running,
                          _ => {}
                      }
                  }
                  canvas.set_draw_color(Color::RGB(0, 0, 0));
                  canvas.clear();
          
                  canvas.set_draw_color(Color::RGB(255, 255, 255));
                  canvas.fill_rect(Rect::new(350, 250, 100, 100)).unwrap();
          
                  canvas.present();
                  std::thread::sleep(Duration::new(0, 1_000_000_000u32 / 60));
              }
          }
          
          1. 使用cargo run 运行。
            一个矩形显示在窗口的中间。

            Rust + SDL2でゲーム開発

            使用按键输入移动矩形

            当你按下一个键时,上面的代码什么都不做。
            允许您通过击键移动矩形。

            添加变量来表示坐标。

            let (mut x, mut y) = (350, 250);
            

            接下来,添加一个根据键输入移动坐标的过程。
            获取可以从中获取键盘状态的KeyboardState 结构。

            let state = event_pump.keyboard_state();
            

            调用is_scancode_pressed 函数以确定是否已按下某个键。
            论据是扫描码枚举通过
            以下代码根据箭头键输入移动坐标。

            if state.is_scancode_pressed(Scancode::Up) {
                y -= 5;
            }
            if state.is_scancode_pressed(Scancode::Down) {
                y += 5;
            }
            if state.is_scancode_pressed(Scancode::Left) {
                x -= 5;
            }
            if state.is_scancode_pressed(Scancode::Right) {
                x += 5;
            }
            

            将坐标变量传递给绘制矩形的进程。

            canvas.fill_rect(Rect::new(x, y, 100, 100)).unwrap();
            

            再次运行cargo run
            现在您可以按箭头键移动矩形。

            Rust + SDL2でゲーム開発

            综上所述

            游戏开发很有趣,因为您编写的代码以易于理解的方式直观地反映出来。
            如果您喜欢游戏,为什么不尝试游戏开发呢?

            参考


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308627118.html

相关文章: