ruffle 中文文档 下载 App

控制不响应:键盘 / 鼠标操作没反应

先点一下画布试试

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 还没完整实现。单指点击基本没问题,手势识别还在做。

快速自查清单