1 个不稳定版本
0.1.0 | 2023年4月7日 |
---|
#465 在 #游戏引擎
7KB
雪玩
雪玩WebAssembly API的Rust惯用接口,用于Frost Giant Studios开发的实时策略游戏Stormgate。
WebAssembly和标准库
雪玩提供了一个API,模组可以通过调用该API来影响游戏。这个API通过WebAssembly(WASM)公开。对于初学者来说,WASM是一种平台无关的二进制代码格式,非常适合第三方模组,因为它允许使用各种工具进行模组化(如Rust!),同时保持良好的性能并确保安全性(例如,确保模组只能执行它们被允许的操作,不会被用于病毒或其他类型的恶意软件)。
通常,当你编译Rust代码时,你会将其编译成适用于你的CPU架构的本地代码。当为雪玩构建模组时,你需要将其编译成WebAssembly。然后,可以将这段WebAssembly代码导入到雪玩引擎中。然而,因为你正在编译为WebAssembly并在雪玩中运行,你无法访问标准库——最重要的是,你不能分配堆内存,所以没有 Vec
或 String
,只有静态大小的数组(如 [u8; 10]
)和字符串切片(&str
)。
快速入门
为了编译为WASM并设置您的代码不链接到标准库,您需要执行以下操作
- 使用
cargo new --lib <crate_name_here>
创建一个新的Cargo项目 - 在您的Cargo项目中创建
.cargo/config.toml
文件,并填写以下配置,这将使您的crate编译为WASM[build] target = "wasm32-unknown-unknown"
- 在您的
lib.rs
文件的顶部,使用no_std
属性禁用标准库,并使用此crate提供的panic处理器(有关panic处理的更多详细信息,请参见下文)#![no_std] // Don't use the panic handler during tests since tests will have access to std. #[cfg(not(test))] #[panic_handler] fn panic_handler(panic_info: &core::panic::PanicInfo) -> ! { snowplay::panic_handler(panic_info) }
- 最后,在您的
Cargo.toml
中,将您的crate类型设置为cdylib
以在构建时生成.wasm
库[lib] crate_type = ["cdylib"]
- 现在,一旦运行
cargo build
,您应该在my_crate/target/wasm32-unknown-unknown/debug
文件夹中看到my_crate.wasm
文件!
Panic处理
标准库包含一个“panic处理器”,这是一个在您的代码中发生panic时被调用的函数。由于我们没有使用标准库,我们无法免费获得这个panic处理器。幸运的是,对于您来说,snowplay
crate为您定义了一个panic处理器,当发生panic时,它会在游戏中打印出错误消息。如果您愿意,您可以使用自己的panic处理器。
snowplay_sys
这个crate使用一个低级别的crate,snowplay_sys
,来调用Snowplay的API。您很可能会想使用这个crate以获得易于使用的更高层接口,但如果您想自定义API的使用,可以直接使用snowplay_sys
。
这个crate的状态
Snowplay目前尚未发布。因此,这个crate现在为空。一旦Stormgate发布带有公共API的版本,这个crate将实现其承诺的功能。如果您也对这个感兴趣,请与我们联系!
免责声明
本项目与Frost Giant Studios没有任何关联或官方支持。