我使用 SLD2 箱来创建一个简单的物理模拟/引擎。我想使用
"gfx"
功能来获取帧速率和绘图基元。我知道我需要将 "SDL2_gfx.lib"
文件包含在 C:\Users\{Your Username}\.rustup\toolchains\{current toolchain}\lib\rustlib\{current toolchain}\lib
中,就像 "SLD2.lib"
安装一样。问题是我找不到所需的 "SDL2_gfx.lib"
文件。 存储库引导我到这个gfx下载源。但是,我似乎在该文件夹中找不到任何 ".lib"
文件。我尝试使用 Visual Studio Code 构建 "SLD2_gfx"
解决方案(在所述文件夹中找到)以获得 ".lib"
文件,但由于缺少头文件而失败。我不熟悉 C/C++ 或 Visual Studio Code,所以我也无法修复该解决方案。如何获取 "SDL2_gfx.lib"
文件和/或关联的 ".dll"
文件?
这是我到目前为止得到的代码:
use sdl2::{pixels::Color, event::Event, keyboard::Keycode, rect::{Rect, Point}};
use sdl2::gfx::*;
const WIDTH: u32 = 1000;
const HEIGHT: u32 = 700;
const RECT_SIZE: u32 = 30;
pub fn main() {
let sdl_context = sdl2::init().unwrap();
let video_subsystem = sdl_context.video().unwrap();
let window = video_subsystem.window("Physics Sim", WIDTH, HEIGHT)
.position_centered()
.build()
.unwrap();
let width = window.size().0;
let height = window.size().1;
let mut canvas = window.into_canvas().build().unwrap();
canvas.set_draw_color(Color::RGB(0, 0, 0));
canvas.clear();
canvas.present();
let mut event_pump = sdl_context.event_pump().unwrap();
let mut i = 0;
let mut rect = Rect::from_center(Point::new(width as i32 / 4, height as i32 / 4), RECT_SIZE, RECT_SIZE);
let rect_border_width = 1;
'running: loop {
i = (i + 1) % 255;
canvas.set_draw_color(Color::RGB(0, 0, 0));
canvas.clear();
// Inside of rect
canvas.set_draw_color(Color::RGB(i, 64, 255 - i));
canvas.fill_rect(rect).unwrap();
// Border of rect
canvas.set_draw_color(Color::RGB(255, 255, 255));
canvas.draw_rect(rect).unwrap();
for event in event_pump.poll_iter() {
match event {
Event::Quit {..} |
Event::KeyDown { keycode: Some(Keycode::Escape), .. } => {
break 'running
},
_ => {}
}
}
// game loop
let rect_y = rect.y();
if rect_y + rect_border_width + RECT_SIZE as i32 <= height as i32 {
rect.set_y(rect_y);
}
canvas.present();
::std::thread::sleep(std::time::Duration::new(0, 1_000_000_000u32 / 60));
} }
Cargo.toml
:
[dependencies]
sdl2 = {version = "0.35.2", default-features = false, features = ["gfx"]}
我遇到的错误:
note: LINK : fatal error LNK1181: cannot open input file 'SDL2_gfx.lib'
我按照 README.md 文件中的 vcpkg 部分取得了成功:https://github.com/Rust-SDL2/rust-sdl2#windows-msvc-with-vcpkg 并且那里的说明更清晰一些。
vcpkg
是一个包管理器,可帮助管理 C 和 C++ 库。我不需要直接安装它,而是通过一个名为 cargo-vcpkg
的 Rust 货物命令来安装它,它根据需要从 github 存储库克隆和构建 vcpkg
。
我的
Cargo.toml
文件看起来像这样(注意“use-vcpkg”功能和 vcpkg 的具体说明,例如 github 存储库位置和要查看的 git rev(501db0f 是最近的发行版本)):
[package]
name = "sdl2-gfx-game"
version = "0.1.0"
edition = "2021"
[dependencies.sdl2]
version = "0.35.2"
default-features = false
features = ["static-link", "use-vcpkg", "gfx"]
[package.metadata.vcpkg]
dependencies = ["sdl2", "sdl2-gfx"]
git = "https://github.com/microsoft/vcpkg"
rev = "501db0f"
[package.metadata.vcpkg.target]
x86_64-pc-windows-msvc = { triplet = "x64-windows-static-md" }
之后就是跑步的问题了
cargo install cargo-vcpkg
这安装了cargo-vcpkg,这是一项一次性任务。
那么,
cargo vcpkg build
当要包含任何新的 C 或 C++ 库(例如 sdl2 ttf)时,需要重新运行。这通常需要一些时间。
最后,
cargo build
这将像往常一样构建您的项目,并安装 sdl2-gfx 软件包并能够运行。
@nitinmdsu 我用您提供的方法成功构建了 sdl2-gf2。 但我在构建 sdl2-tff 时遇到问题
Fetching vcpkg
Checkout rev 501db0f
Installing sdl2 sdl2-gfx sdl2-image sdl2-ttf sdl2
-- stdout --
-- stderr --
cargo-vcpkg: failed
我收到此错误,没有更多解释。