《网站平台建设》课程实训,上海市中小企业服务中心,亚马逊网上书店,公众号里的网站怎么做的在Emuelec中#xff0c;对独立模拟器配置手柄按键是个非常头疼的事#xff0c;难点在于emuelec的按钮配置映射到模拟器所需的按钮配置#xff0c;更头疼的是#xff0c;每个模拟器所需的配置都不相同#xff0c;此时就需要花大把时间了解每个模拟器的配置上。好在#xf…在Emuelec中对独立模拟器配置手柄按键是个非常头疼的事难点在于emuelec的按钮配置映射到模拟器所需的按钮配置更头疼的是每个模拟器所需的配置都不相同此时就需要花大把时间了解每个模拟器的配置上。好在Emuelec自4.3以后陆续增加了对独立模拟器的适配增强其中最重要的就是对其自动映射按钮功能它通过自动映射脚本让玩家无需了解各个模拟器配置细节既可自动完成手柄配置。这里以dc独立模拟器flycast为例说说其自动映射脚本的工作原理。
独立flycast模拟器游戏启动主要流程如下
1.开始游戏-启动游戏脚本/usr/bin/emuelecRunEmu.sh-启动模拟器脚本:/usr/bin/flycast.sh
2.在flycast.sh中调用自动设置手柄按键脚本/usr/bin/set_flycast_joy.sh
3.完成键位映射配置生成对应配置文件/storage/.config/flycast/emu.cfg 和 /storage/.config/flycast/mappings/手柄按钮映射文件.cfg
4.启动独立模拟器flycastSA ,开始真正游戏
这里重点分析以下/usr/bin/joy_common.sh和/usr/bin/set_flycast_joy.sh
1. 在set_flycast_joy.sh中引用/usr/bin/joy_common.sh中的公用函数
source joy_common.sh flycast
2. joy_commn.sh中主要提供收集本机所有手柄信息的功能其函数名为jc_get_playersjc_get_players的基本工作原理是通过扫描本机的手柄的硬件信息并通过查表/storage/.config/SDL-GameControllerDB/gamecontrollerdb.txt来获取手柄的键值配置信息
# echo ${SDL_GAMECONTROLLERCONFIG_FILE}
/storage/.config/SDL-GameControllerDB/gamecontrollerdb.txt
3.joy_common.sh收集并整理好手柄信息后将其回传给set_flycast_joy.sh中的set_pad函数完成最后转换映射到模拟器所需的配置
#在joy_common.sh中的代码
jc_get_players() {......local PLAYER_CFGfor p in {1..4}; dolocal CFG${p} ${PLAYER_CFGS[$(( p-1 ))]}if [[ $p -le $cfgCount ]]; thenecho PLAYER_CFG${CFG}fieval clean_pad ${CFG}[[ ${CFG} ! ${p} ]] eval set_pad ${CFG} #这里回传给set_flycast.sh脚本的去做真正的配置转换映射done...
}
#在set_flycast_joy.sh中的代码
set_pad() {echo set_pad params: $1 $2 $3 $4local JSI$2local DEVICE_GUID$3local JOY_NAME$4......
}
4.自此完成了对模拟器配置文件的生成与映射
题外话
早期的emuelec4.6对独立flycast模拟器手柄映射有bug会导致第一个手柄会被映射到第二个玩家导致有些游戏无法操控在set_flycast.sh中有一行代码如下
local DEVICEmaple_sdl_joystick_${index} ${JSI:2}\ndevice${1} 0\ndevice${1}.1 1\ndevice${1}.2 1\n
最新的4.6仓库代码已经修正了代码如下
local DEVICEmaple_sdl_joystick_${index} ${index}\ndevice${1} 0\ndevice${1}.1 1\ndevice${1}.2 1\n
你看出差异了吗呵呵