#playdate #gaming #game #incomplete #undocumented #write #functional

nightly crankstart

这是一个几乎无法使用、极度不完整且基本没有文档的Rust库,其目的是让您能够在Playdate便携式游戏系统中使用Rust编写游戏。

3个版本

0.1.2 2023年9月4日
0.1.1 2022年4月27日
0.1.0 2020年6月17日

#143 in 游戏

MIT许可协议

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"

您的项目

使用此系统进行您的项目需要一些设置

  1. 按照crank的设置进行,支持Rust nightly的no_std
  2. 使用cargo new --lib project_name开始一个新的rust库项目。
  3. 在您的新项目同一深度执行git clone [email protected]:pd-rs/crankstart.git
  4. 进入新项目,并在您的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" ]
  1. Cargo.toml同一级别添加Crank.toml,内容如下
[[target]]
    name = "project_name"
    assets = [
    ]

assets 应该是一个路径列表,包含你项目中需要复制的任何或所有资源,例如精灵、音乐等。

  1. 在你的 lib.rs 文件中,你只需要将 crankstart::Game 特征实现到游戏的核心状态结构体中,然后在该结构体上调用 crankstart::crankstart_game!。请查看 examples 文件夹中的示例。
  2. 要运行项目,从其根目录开始,你应该可以成功执行 crank run 命令!

如果你想要查看遵循这些约定的独立项目示例,请查看 Nine Lives

更新绑定

如果有更新的 Playdate SDK 可用,它更新了 C API,那么 crankstart 绑定应该更新以匹配。以下是一份指南。

  1. 安装 bindgen 的依赖项
  2. 安装 bindgen-cli
  3. 安装 gcc-arm-none-eabi 工具链,可以是 手动 或通过系统包,可能也会被命名为类似 "cross-arm-none-eabi-gcc" 的名称。
  4. 在 Linux 上,安装 32 位 glibc 开发包,它可能被称为 glibc-devel-32bit
  5. 安装新的 Playdate SDK,如果它不在默认的 MacOS 路径下,将 PLAYDATE_SDK_PATH 设置为你解压缩的位置。(这应该是包含 C_APICoreLibs 等)的目录。
  6. 运行 ./scripts/generate_bindings.sh
  7. 检查对 crankstart-sys/src/bindings_* 的更改——它们应该反映了 Playdate C API 的更新。如果没有更改,请再次检查 C API 是否实际更改了,而不仅仅是 Lua API。
  8. 提交一个包含更改的 PR :)

依赖项

~3MB
~60K SLoC