[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

相关文章

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

Java继承映射的三种使用方法示例

《Java继承映射的三种使用方法示例》继承在Java中扮演着重要的角色,它允许我们创建一个类(子类),该类继承另一个类(父类)的所有属性和方法,:本文主要介绍Java继承映射的三种使用方法示例,需... 目录前言一、单表继承(Single Table Inheritance)1-1、原理1-2、使用方法1-

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis