跳到主要内容

手柄输入(Gamepad Input)

Web (JS) 运行时把游戏控制器的输入送到你的 Rive 图形,因此玩家可以用控制器的按钮和摇杆驱动它。手柄输入在 @rive-app/canvas、@rive-app/canvas-lite 和 @rive-app/webgl2 的 2.48.0+ 中默认开启。

要让文件响应控制器,给状态机添加一个手柄监听器。脚本也可以接收手柄事件。

输入如何到达图形(How input reaches the graphic)​

  • 运行时在状态机推进之前,每帧读取浏览器检测到的每一个控制器。
  • 没有浏览器标准按钮布局的控制器也能用。它们的按钮和摇杆按浏览器报告的方式送出。
  • 页面上的每个 Rive 实例都把输入送到它正在播放的状态机。如果它播放了不止一个,只有第一个会收到控制器输入。
  • 手柄事件先送到拥有焦点的节点,再沿其祖先向上。没有任何节点拥有焦点时,只有脚本能收到它们。

要求画布拥有焦点(Requiring canvas focus)​

默认情况下,即使画布没有浏览器焦点,Rive 实例也会收到控制器输入。若只在浏览器焦点位于画布上时才送入输入,把 gamepadOptions 里的 requireFocus 设为 true。同一页上有多块图形共用一个控制器时,这会有帮助。

const rive = new Rive({
canvas: document.getElementById("rive-canvas"),
src: "game.riv",
stateMachine: "State Machine 1",
autoplay: true,
gamepadOptions: {
requireFocus: true,
},
});

语义叠加层和隐藏输入都算作画布的一部分。浏览器焦点在别处时,控制器保持连接,但图形会看到所有按钮都已松开、所有摇杆都在静止位置。

关闭手柄输入(Turning off gamepad input)​

要让某个 Rive 实例不再读取控制器,把 shouldDisableGamepad 设为 true。它的状态机随后不会收到手柄事件。

const rive = new Rive({
canvas: document.getElementById("rive-canvas"),
src: "game.riv",
stateMachine: "State Machine 1",
autoplay: true,
shouldDisableGamepad: true,
});

把 shouldDisableRiveListeners 设为 true 也会关闭手柄输入。

看完还有疑问?进群交流下!
与众多 Rive 创作者、开发者一起交流探讨与答疑解惑。
加入交流群