[Emuelec]独立模拟器自动映射手柄按键脚本研究

2023-11-05 09:28

本文主要是介绍[Emuelec]独立模拟器自动映射手柄按键脚本研究,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在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_players,jc_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_CFG=for 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 $4"local JSI="$2"local DEVICE_GUID=$3local JOY_NAME="$4"......
}

4.自此完成了对模拟器配置文件的生成与映射

题外话:

早期的emuelec4.6对独立flycast模拟器手柄映射有bug,会导致第一个手柄会被映射到第二个玩家,导致有些游戏无法操控,在set_flycast.sh中有一行代码如下:

local DEVICE="maple_sdl_joystick_${index} = ${JSI:2}\ndevice${1} = 0\ndevice${1}.1 = 1\ndevice${1}.2 = 1\n"

最新的4.6仓库代码已经修正了,代码如下:

local DEVICE="maple_sdl_joystick_${index} = ${index}\ndevice${1} = 0\ndevice${1}.1 = 1\ndevice${1}.2 = 1\n"

你看出差异了吗?呵呵

这篇关于[Emuelec]独立模拟器自动映射手柄按键脚本研究的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/348911

相关文章

Python3脚本实现Excel与TXT的智能转换

《Python3脚本实现Excel与TXT的智能转换》在数据处理的日常工作中,我们经常需要将Excel中的结构化数据转换为其他格式,本文将使用Python3实现Excel与TXT的智能转换,需要的可以... 目录场景应用:为什么需要这种转换技术解析:代码实现详解核心代码展示改进点说明实战演练:从Excel到

Python脚本实现图片文件批量命名

《Python脚本实现图片文件批量命名》这篇文章主要为大家详细介绍了一个用python第三方库pillow写的批量处理图片命名的脚本,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言源码批量处理图片尺寸脚本源码GUI界面源码打包成.exe可执行文件前言本文介绍一个用python第三方库pi

Java中实现订单超时自动取消功能(最新推荐)

《Java中实现订单超时自动取消功能(最新推荐)》本文介绍了Java中实现订单超时自动取消功能的几种方法,包括定时任务、JDK延迟队列、Redis过期监听、Redisson分布式延迟队列、Rocket... 目录1、定时任务2、JDK延迟队列 DelayQueue(1)定义实现Delayed接口的实体类 (

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

Java中基于注解的代码生成工具MapStruct映射使用详解

《Java中基于注解的代码生成工具MapStruct映射使用详解》MapStruct作为一个基于注解的代码生成工具,为我们提供了一种更加优雅、高效的解决方案,本文主要为大家介绍了它的具体使用,感兴趣... 目录介绍优缺点优点缺点核心注解及详细使用语法说明@Mapper@Mapping@Mappings@Co

10个Python自动化办公的脚本分享

《10个Python自动化办公的脚本分享》在日常办公中,我们常常会被繁琐、重复的任务占据大量时间,本文为大家分享了10个实用的Python自动化办公案例及源码,希望对大家有所帮助... 目录1. 批量处理 Excel 文件2. 自动发送邮件3. 批量重命名文件4. 数据清洗5. 生成 PPT6. 自动化测试

使用Java实现一个解析CURL脚本小工具

《使用Java实现一个解析CURL脚本小工具》文章介绍了如何使用Java实现一个解析CURL脚本的工具,该工具可以将CURL脚本中的Header解析为KVMap结构,获取URL路径、请求类型,解析UR... 目录使用示例实现原理具体实现CurlParserUtilCurlEntityICurlHandler