#input #keyboard #controller #control #game

prongs

Rust 编写的输入处理架构。后端无关,提供序列化、赋值和统一接口以处理输入。支持键盘、鼠标和控制器。

4 个版本

1.0.2 2019 年 1 月 26 日
1.0.1 2019 年 1 月 25 日
0.0.5 2020 年 1 月 17 日
0.0.4 2019 年 2 月 6 日

#1518游戏开发

LGPL-3.0

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。它是由以下组合而成的

  1. 键映射(输入 -> 用户动作映射)
  2. 分配功能(通过操作控件创建映射)
  3. 处理功能(在主循环中应用映射)
  4. 统一接口和简化

Prongs 将输入事件抽象成三层结构。这些层是

  1. 输入类别,例如鼠标、键盘或控制器
  2. 输入实例,例如键 "k"、鼠标按钮 #2 或轴 #2
  3. 输入状态,例如按钮按下/释放或轴值

这最好在 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 新类型,它将保存针对 TEventTypeTControllerID 的后端类型的实际 Schema 对象。最后,新的方案必须在主模块下通过具有后端功能的配置使可见。Cargo.toml 必须扩展为将后端依赖项标记为可选,并命名新的功能。

依赖项

~0.5–1.7MB
~34K SLoC