4 个版本
1.0.2 |
|
---|---|
1.0.1 |
|
0.0.5 | 2020 年 1 月 17 日 |
0.0.4 | 2019 年 2 月 6 日 |
#1518 在 游戏开发
37KB
634 行
废弃项目
此项目不再维护。
prongs
Rust 编写的输入处理架构。后端无关,提供序列化、赋值和统一接口以处理输入。支持键盘、鼠标和控制器。
当前后端包括 Piston 和 Gilrs,还有更多即将推出。
警告 prongs 目前处于 alpha 版本。API 可能会发生变化。
注意 prongs 需要 Rust 1.32 或更高版本。
使用 prongs 库
要使用 prongs 库,请将其包含在您的 Cargo.toml
文件中。您必须通过功能指定后端,例如。
[dependencies]
prongs = { version = "0.0.3", features = ["backend_piston"] }
文档
示例
请参阅 示例仓库
设计
Prongs 提供了一个特定的后端 Schema 结构,它统一并简化了处理输入事件的工作。目标是提供可序列化性、输入分配并统一处理输入的接口。主要目标受众是游戏开发人员和引擎开发者。
Prongs 的主要工具是 Schema。它是由以下组合而成的
- 键映射(输入 -> 用户动作映射)
- 分配功能(通过操作控件创建映射)
- 处理功能(在主循环中应用映射)
- 统一接口和简化
Prongs 将输入事件抽象成三层结构。这些层是
- 输入类别,例如鼠标、键盘或控制器
- 输入实例,例如键 "k"、鼠标按钮 #2 或轴 #2
- 输入状态,例如按钮按下/释放或轴值
这最好在 InputCause 枚举中表达。
由于后端处理事件循环的方式存在各种差异,因此该库不运行任何事件循环。要使用 prongs,您需要定义一个动作类型,该类型将标识输入事件上的映射。例如
enum Actions
{
Up,
Down,
Left,
Right,
}
然后您需要将 process_event
函数“挂钩”到您的主事件循环中以便处理。这将把输入事件映射到您在分配或加载 Schema 配置时指定的动作。
将输入事件映射到用户操作是通过使用 assign_input
函数完成的。这可以按需将操作分配给输入事件(例如,在点击菜单项时)。请注意,assign_input
处理了必要的去重(例如,它不会将按钮释放视为与按钮按下不同的映射)。因为 Schema 对象是完全可序列化的,所以您也可以从先前存储的任何配置中加载现有设置。
开发
要构建,您需要指定所需的后端,例如:cargo build --features backend_piston,backend_gilrs
测试也是如此:cargo test --features backend_piston,backend_gilrs
如果您没有指定后端,则不会编译和运行该后端的测试。
添加新的后端
要添加新的后端,必须在后端的事件上实现 ToEventType 特性。此外,还需要创建一个专门的 SchemaBackendName
新类型,它将保存针对 TEventType
和 TControllerID
的后端类型的实际 Schema 对象。最后,新的方案必须在主模块下通过具有后端功能的配置使可见。Cargo.toml 必须扩展为将后端依赖项标记为可选,并命名新的功能。
依赖项
~0.5–1.7MB
~34K SLoC