emulatorjs模拟器实现按键配置同步
文章摘要
针对emulatorjs部署的web端怀旧游戏模拟器默认按键配置不合理导致操作不便的问题,通过引入profile配置文件机制实现跨浏览器和设备的按键配置同步。方案基于RetroArch模拟器的retroarch.cfg配置文件,利用管理控制台创建用户账号并同步配置,前端页面通过Push/Pull操作实现配置文件在不同设备间的传输,最终解决因默认设置导致的交叉手操作问题。该方法适用于需多人协作或跨设备访问的web端游戏场景,为后续扩展多用户个性化配置提供基础。
Qwen3-14B · 2026-06-18

前言

我在上一篇文章中介绍了如何基于emulatorjs的docker来部署web端怀旧游戏模拟器的详细步骤(参见文章:使用docker基于emulatorjs部署web端怀旧游戏模拟器),但是最后却留有一个非常影响游戏体验的问题,那就是默认按键配置不合理:上下左右方向键由位于全键盘右边的↑ ↓ ← →四个按键来控制,而常规的AB按键(跳、子弹)由全键盘最左边的X和Z键来按,对于绝大部分人来说,控制方向是左手,跳和子弹是用右手来控制,这样岂不是需要交叉手玩?这能忍?

于是研究折腾了一番,先是想通过修改emu-main.js文件里的按键映射来直接修改默认配置,但是失败了,貌似还需要修改loader.js文件里面emu-main.js和emulator.js的加载顺序,要emulator.js先于emu-main.js加载,研究了半天没搞懂,不是编程出身的劣势被展现得淋漓尽致。。。于是只有改变思路,从profile配置文件的角度出发,最终解决了这个问题。

思路

默认情况下,当你使用浏览器访问前端游戏web页面的时候,如果通过F1键进入RetroArch模拟器的配置界面并通过”Settings”-“Input”选项设置一次并保存以后,其他游戏也可以使用这个按键设置,不过前提是通过同一个浏览器访问,因为配置文件(retroarch.cfg)是和浏览器绑定的(其实还有访问的网址,严格意义上来说应该是和浏览器以及访问的网址绑定)。那么,只要能让配置文件不只存放在一个浏览器”本地”,还能”同步”到相同机器的不同浏览器,甚至不同机器的不同浏览器,就能实现按键配置跟随了。那么怎么解决这个关键问题呢?那就是profile(配置文件)。

[vip]

profile(管理员设置)

我在上一篇文章中提到过emulatorjs管理控制台的profile管理页面:

image.png

在这里可以新建账号以及管理账号对应的配置文件。例如在上图下方红框中的username和password均输入guest,然后点击右方的Create Profile,即可在default下方创建guest账号:
image.png

点击上方红框中的guest账号进入其配置文件界面:
image.png

上图中states文件夹存放游戏存档,而retroarch.cfg就是存放按键配置的文件。

游戏前端页面设置

按键配置同步

上一节的设置是在管理控制台界面,需要管理员提前为不同用户创建账号,而具体游戏是在前端web页面上:

image.png

在游戏前端的首页点击左上角红框中的按钮,进入后界面如下:
image.png

在上图左上角红框部分输入已有账号的用户名,密码(例如guest,guest),然后点击login登录:
image.png

上图是guest登录之后的界面,右上角的”Push to Server”是将guest账号在本地浏览器中的配置文件上传到游戏服务器,是从游戏服务器上将guest账号的配置文件下载到当前浏览器,所以”Push to Server”和”Pull from Server”就是实现按键配置跟随的方式了。在一个已经设置完成的浏览器上将对应账号的配置push到游戏服务器,在其他浏览器上用相同账号登录并把配置pull下来即可。

默认按键

其实默认按键就是default用户对应的配置:

image.png

还是开始那个页面,在没有用特定账号登录之前左下方红框中的配置文件就是default用户的配置文件:
image.png

按照上图所示步骤:
第一步,点击DL Full Backup按钮将当前浏览器对应的所有配置文件(也包括default用户)下载到本地
第二步,使用Upload Full Backup按钮将刚才保存的配置文件上传用来覆盖原有配置
第三步,在任意浏览器访问前端页面,重新进入该界面(不登录具体账户),然后点击最上方按钮Pull Default Config按钮即可下载默认用户配置。

[/vip]

所以其实就跟登录具体账号然后Pull配置一样,default只是在不登录的情况下Pull配置,所以其实并没有真正实现底层修改默认配置,而是仍旧通过配置文件同步的方式间接来实现。

📌 内容结构提示:
这篇内容属于「博客知识地图」的一部分,你可以从这里查看完整内容路径: 博客知识地图
查看相关分类·3个匹配
📎 相关文章
分享这篇文章
博客内容均系原创,转载请注明出处!博客的RSS地址为:https://blog.tangwudi.com/feed,欢迎订阅;如有需要,可以加入Telegram群一起讨论问题。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
       

👋 欢迎来到“无敌的个人博客”

这里主要围绕以下方向展开长期探索:

🧱 个人数字基础设施与博客系统构建
☁️ Cloudflare 与网络架构实践
🧠 AI 与知识系统探索
🛡️ 网络安全与访问优化
🎵 音乐与声音认知
👁️ 认知视角与世界观