前言
我在上一篇文章中介绍了如何基于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管理页面:

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

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

上图中states文件夹存放游戏存档,而retroarch.cfg就是存放按键配置的文件。
游戏前端页面设置
按键配置同步
上一节的设置是在管理控制台界面,需要管理员提前为不同用户创建账号,而具体游戏是在前端web页面上:

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

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

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

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

按照上图所示步骤:
第一步,点击DL Full Backup按钮将当前浏览器对应的所有配置文件(也包括default用户)下载到本地
第二步,使用Upload Full Backup按钮将刚才保存的配置文件上传用来覆盖原有配置
第三步,在任意浏览器访问前端页面,重新进入该界面(不登录具体账户),然后点击最上方按钮Pull Default Config按钮即可下载默认用户配置。
[/vip]
所以其实就跟登录具体账号然后Pull配置一样,default只是在不登录的情况下Pull配置,所以其实并没有真正实现底层修改默认配置,而是仍旧通过配置文件同步的方式间接来实现。