控制不响应:键盘 / 鼠标操作没反应
先点一下画布试试
Ruffle 的 Canvas / WebGL 画布默认不聚焦。如果你的页面里 Ruffle 画布在一个复杂布局里(周围还有 HTML 元素),浏览器会把焦点保持在页面上而不是 Ruffle 的 canvas 元素上。
点一下 Ruffle 画面里的任意位置——光标焦点就进去了,键盘事件开始传递。
这是最常见、也最容易让人困惑的小问题——尤其是 Ruffle 扩展替换出来的那些旧 Flash 元素,焦点默认丢失。
站长怎么办(网站嵌入)
确保你的 JS 初始化里,Ruffle 容器加载后自动聚焦:
player.addEventListener("loadedmetadata", () => {
player.focus();
});
或者 CSS 里给容器加 tabindex="0",让它可以被 Tab 键聚焦。
桌面版没有焦点问题
独立桌面版默认画布就是焦点,键盘鼠标直接能工作。如果独立版里也不响应——问题更可能在 SWF 本身。
全键盘控制的游戏:Tab 键被浏览器吃掉
某些 Flash 游戏把 Tab 键当作「下一个按钮」的控制键(Flash Player 原版就是这么工作的)。但浏览器默认把 Tab 键用来切换页面上的可聚焦元素(链接、输入框、按钮)。
在网站嵌入里,你需要手动把 Tab 键拦截下来转给 Ruffle:
document.addEventListener("keydown", (e) => {
if (e.key === "Tab") {
e.preventDefault();
// 把 Tab 事件模拟触发给 Ruffle player
}
});
这在网站嵌入里需要额外处理;桌面版里 Tab 直接进 SWF,没问题。
ActionScript 自己的焦点逻辑
某些 AS3 游戏内部自己管理焦点(stage.focus、TextField.focus、MouseEvent.FOCUS_IN),如果 Ruffle 对这些焦点事件的模拟跟旧 Flash Player 有细微差异——可能导致游戏认为焦点在某个 TextField 上、而键盘事件全被 TextField 的文本输入吃掉了。
这种情况去 GitHub Issue Tracker 搜一下有没有人报过类似的「焦点事件不正确」。
触摸屏(iOS / Android)
Ruffle 在触屏设备上的支持正在完善。特别是多点触控手势(Flash 的 TouchEvent、GestureEvent),Ruffle 还没完整实现。单指点击基本没问题,手势识别还在做。
快速自查清单
- [ ] 点一下 Ruffle 画布的任意位置,然后再试键盘
- [ ] 桌面版能响应、Web 版不行 → 焦点问题,站长给 player 加 focus()
- [ ] 只有 Tab 键不工作 → 浏览器把 Tab 拦了
- [ ] 只有触摸屏上不行 → 多点触控还没完整支持
- [ ] 桌面版也不行 → 加
--verbose看日志,看有没有 Unimplemented 相关焦点事件