介绍
我使用Rust和SDL2创建了一个游戏开发环境,所以我将介绍它。
最近,使用 Unreal Engine 和 Unity 等游戏引擎进行开发是主流。
我认为游戏编程对于研究内部运作和设计很有用。
什么是 SDL
SDL 代表 Simple DirectMedia Layer,是一个提供屏幕绘制、音频输出和按键输入等功能的库。
SDL 本身是用 C 编写的,但包装器可用于各种编程语言。
在 Rust 中,您可以使用 rust-sdl2 crate 来使用 SDL 功能。
设置
提前生锈安装收下。
以下是 Windows(64 位)的设置过程。
-
存储库的发布页面下载
SDL2-devel-2.x.x-VC.zip并解压。 -
在展开的文件夹中打开
lib\x64文件夹。
有4个文件。 -
将上面的文件复制到下面的路径。
C:\Users\{USER_NAME}\.rustup\toolchains\{TOOLCHAIN}\lib\rustlib\{TOOLCHAIN}\lib-
将
{USER_NAME}替换为您的帐户名。 -
将
{TOOLCHAIN}替换为您的工具链名称。
通常看起来stable-x86_64-pc-windows-msvc
如果没有对应的文件夹,检查工具链名称rustup show。
设置现已完成。
执行
现在让我们实际运行代码。
-
创建一个新项目。
$ cargo new sample_sdl2 -
将以下内容添加到
sample_sdl2内的Cargo.toml。
最新版本的 sdl2 是拿铁咖啡艾欧请与[dependencies] sdl2 = "0.32.0" -
将代码输入
main.rs以执行以下操作:- 初始化库显示
- 窗口
- 获取绘制屏幕的 Canvas 实例
- 在无限循环中执行以下操作
- 收到结束事件时退出循环
- 清屏
- 绘制矩形
- 刷新屏幕并等待
矿。 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)); } }-
使用
cargo run运行。
一个矩形显示在窗口的中间。使用按键输入移动矩形
当你按下一个键时,上面的代码什么都不做。
允许您通过击键移动矩形。添加变量来表示坐标。
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。
现在您可以按箭头键移动矩形。综上所述
游戏开发很有趣,因为您编写的代码以易于理解的方式直观地反映出来。
如果您喜欢游戏,为什么不尝试游戏开发呢?参考
-
-
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308627118.html