3个版本
0.1.2 | 2023年9月4日 |
---|---|
0.1.1 | 2022年4月27日 |
0.1.0 | 2020年6月17日 |
#143 in 游戏
1MB
31K SLoC
Playdate的Rust
你发现了一个几乎无法使用、极度不完整且基本没有文档的Rust库,其目的是让您能够在Playdate便携式游戏系统中使用Rust编写游戏。
此软件未由Panic赞助或支持。
安装
要使用此库,您还需要安装crank命令行工具。
从您找到此README的crankstart目录中,
crank run --release --example hello_world
应该启动模拟器并加载hello_world示例。
如果您已将设备连接到桌面,
crank run --release --example hello_world --device
应该在设备上启动hello_world示例。
对于sprite_game示例,需要将"PlaydateSDK/C_API/Examples/Sprite Game/Source/images"
中的images文件夹复制到"sprite_game_images"
。
您的项目
使用此系统进行您的项目需要一些设置
- 按照
crank
的设置进行,支持Rust nightly的no_std
。 - 使用
cargo new --lib project_name
开始一个新的rust库项目。 - 在您的新项目同一深度执行
git clone [email protected]:pd-rs/crankstart.git
。 - 进入新项目,并在您的
Cargo.toml
中添加以下内容:
[package.metadata.cargo-xbuild]
memcpy = false
sysroot_path = "target/sysroot"
panic_immediate_abort = false
[profile.dev]
panic = "abort"
opt-level = 'z'
lto = true
[profile.release]
panic = "abort"
opt-level = 'z'
lto = true
[lib]
crate-type = ["staticlib", "cdylib"]
[dependencies]
crankstart = { path = "../crankstart" }
crankstart-sys = { path = "../crankstart/crankstart-sys" }
anyhow = { version = "1.0.31", default-features = false }
euclid = { version = "0.20.13", default-features = false, features = [ "libm" ] }
hashbrown = "0.7.2"
heapless = "0.5.5"
[dependencies.cstr_core]
version = "=0.1.2"
default-features = false
features = [ "alloc" ]
- 在
Cargo.toml
同一级别添加Crank.toml
,内容如下
[[target]]
name = "project_name"
assets = [
]
assets
应该是一个路径列表,包含你项目中需要复制的任何或所有资源,例如精灵、音乐等。
- 在你的
lib.rs
文件中,你只需要将crankstart::Game
特征实现到游戏的核心状态结构体中,然后在该结构体上调用crankstart::crankstart_game!
。请查看examples
文件夹中的示例。 - 要运行项目,从其根目录开始,你应该可以成功执行
crank run
命令!
如果你想要查看遵循这些约定的独立项目示例,请查看 Nine Lives。
更新绑定
如果有更新的 Playdate SDK 可用,它更新了 C API,那么 crankstart 绑定应该更新以匹配。以下是一份指南。
- 安装 bindgen 的依赖项。
- 安装 bindgen-cli。
- 安装 gcc-arm-none-eabi 工具链,可以是 手动 或通过系统包,可能也会被命名为类似 "cross-arm-none-eabi-gcc" 的名称。
- 在 Linux 上,安装 32 位 glibc 开发包,它可能被称为
glibc-devel-32bit
。 - 安装新的 Playdate SDK,如果它不在默认的 MacOS 路径下,将
PLAYDATE_SDK_PATH
设置为你解压缩的位置。(这应该是包含C_API
、CoreLibs
等)的目录。 - 运行
./scripts/generate_bindings.sh
- 检查对
crankstart-sys/src/bindings_*
的更改——它们应该反映了 Playdate C API 的更新。如果没有更改,请再次检查 C API 是否实际更改了,而不仅仅是 Lua API。 - 提交一个包含更改的 PR :)
依赖项
~3MB
~60K SLoC