首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在SDL2操作系统中,如何将Joy-Con的操纵杆从“hat”模式切换到“模拟”模式?

在SDL2(Simple DirectMedia Layer 2)中,Joy-Con的操纵杆默认可能处于"hat"模式,这是一种方向键模式,其中操纵杆的移动被解释为八个离散的方向(上、下、左、右以及四个对角线方向)。然而,有时你可能希望将其切换到"模拟"模式,以便操纵杆的移动可以被解释为连续的值,从而允许更精细的控制。

在SDL2中,要实现这一切换,你需要使用SDL的Joystick API来设置操纵杆的轴模式。以下是一个基本的步骤指南,以及相关的示例代码:

步骤指南

  1. 初始化SDL:首先,确保你已经初始化了SDL,并且已经打开了Joy-Con设备。
  2. 获取操纵杆实例:使用SDL_JoystickOpen()函数获取Joy-Con的SDL_Joystick实例。
  3. 设置轴模式:使用SDL_JoystickSetAxisMode()函数将操纵杆的轴设置为模拟模式。
  4. 处理事件:在主循环中处理SDL事件,以便读取操纵杆的模拟值。

示例代码

代码语言:txt
复制
#include <SDL.h>
#include <stdio.h>

int main(int argc, char* argv[]) {
    SDL_Init(SDL_INIT_JOYSTICK);

    // 打开Joy-Con设备
    SDL_Joystick* joystick = SDL_JoystickOpen(0);
    if (!joystick) {
        printf("无法打开Joy-Con设备: %s\n", SDL_GetError());
        SDL_Quit();
        return 1;
    }

    // 设置操纵杆的轴模式为模拟模式
    if (SDL_JoystickSetAxisMode(joystick, 0, SDL_JOYSTICK_AXISMODE_CONTINUOUS) < 0) {
        printf("无法设置操纵杆轴模式: %s\n", SDL_GetError());
        SDL_JoystickClose(joystick);
        SDL_Quit();
        return 1;
    }

    // 主循环
    int running = 1;
    SDL_Event event;
    while (running) {
        while (SDL_PollEvent(&event)) {
            switch (event.type) {
                case SDL_QUIT:
                    running = 0;
                    break;
                // 处理其他事件...
            }
        }

        // 读取操纵杆的模拟值
        Sint16 x_axis = SDL_JoystickGetAxis(joystick, 0);
        Sint16 y_axis = SDL_JoystickGetAxis(joystick, 1);

        printf("X轴: %d, Y轴: %d\n", x_axis, y_axis);
    }

    // 清理
    SDL_JoystickClose(joystick);
    SDL_Quit();

    return 0;
}

注意事项

  • 确保你的Joy-Con设备已经正确连接到计算机,并且SDL能够识别它。
  • 上述代码中的SDL_JoystickSetAxisMode()函数可能不适用于所有版本的SDL或所有平台。如果该函数不可用,你可能需要查找特定于你的平台和SDL版本的替代方法。
  • 在实际应用中,你可能还需要处理其他SDL事件,如按键事件、按钮事件等。

通过上述步骤和示例代码,你应该能够将Joy-Con的操纵杆从"hat"模式切换到"模拟"模式,并读取其连续的模拟值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

美国小哥DIY世界最大的Switch,高清可玩,按键手柄都能使用

这也很好拆卸,只需要把螺丝拧松,就能把Joy-Con从底座上卸下来。 ? 下方是开源电子原型平台Arduino,这个微处理器能够指导伺服系统的运作和执行。 ?...当信号从前方的仪表盘中输入,它就能告诉每个伺服系统应该去按压Joy-Con的哪个按钮。 ? 再下方就是被固定的真正的Switch本体。 ?...巨型Joy-Con是用3D打印制成的,然后用橡皮筋把巨大的操纵杆放在真正的操纵杆中间,就能实现操作了。 ?...比如,在下方图片的数字编码中,5号位需要更换控制台扬声器,也就是将扬声器放置在扬声器形状的孔中,同时电线朝向中间;13号位要更换电池。 ? 不仅如此,他也会给出一些很实用的建议。...毕业后,他在海军空战中心飞行部主要负责测试SubSkillsNet(潜艇软件模拟器)的各种bug。

40530
  • 5款在Linux上的竞速飞行类开源游戏

    当然,你可以在开源操作系统上玩游戏,但对于开源纯粹主义者来说,显然这还不够完美。...在以后的文章中,我计划为大家介绍RPG游戏和模拟类游戏。 超级企鹅赛 在超级企鹅赛中使用企鹅或者其他角色,在冰天雪地的山上比赛化学吧!...有包含多人模式在内的多种游戏模式可供选择,但是许多车辆只有在单人的故事模式中解锁之后才能使用。...游戏中收录了各式各样不同的赛车和赛道,从常规跑车到拉力赛车都有,但是游戏的玩法是非常典型的经典赛车玩法。键盘、鼠标、操纵杆和方向盘这些操作方式游戏中都有支援到,但是很难使用键盘和鼠标操作。...通过更改配置文件中的选项可以使用操纵杆配件。 不幸的是,游戏的开发进展缓慢,2016年发布了最新版本,但是目前的版本就已经足够吸引人了。

    3K10

    云课五分钟-03第一个开源游戏复现-贪吃蛇

    CMake是一个跨平台的构建工具,可以自动生成特定平台的构建脚本,如Makefile或Visual Studio项目文件等,从而方便用户在不同的操作系统和开发环境中使用统一的方式进行构建。...变量中,以便CMake能够找到SDL2相关的模块。...从你给出的文本中,我看到你提供了关于“DungeonRush”游戏的更多详细信息,包括如何在openSUSE和MacOS上安装依赖项,以及如何编译该游戏。...多人模式: 如果游戏支持多人模式,你可以通过局域网与朋友一起玩游戏。确保你和你的朋友在同一网络中,并获取彼此的IP地址。然后,通过在命令行参数中指定IP地址来连接对方。例如: ....具体的多人模式参数和选项可能会根据游戏而有所不同,请参考游戏的文档或说明进行配置。 这些步骤提供了在Ubuntu环境下安装和使用“DungeonRush”游戏的一般流程。

    34030

    任天堂公布Nintendo Switch,“移动”主机的游戏新方式

    想要在家里玩,可以把Nintendo Switch连接上底座,画面将通过HDMI输出到电视机上;而一旦从底座上取下,它就变为掌上游戏机。...Nintendo Switch拥有两个可拆卸式的手柄,名为Joy-Con,玩家既可以单人手持两个Joy-Con,也可以两人各持一个Joy-Con进行对战,另外还支持多人模式,多个玩家可以分别持有自己的Joy-Con...当然,Nintendo的传统手柄仍然将支持这一新设备。 游戏大厂Ubisoft很早就开始关注任天堂的这个新游戏机了,该公司的首席执行官声称该游戏机或将变革现有的游戏方式。...育碧CEO Yves Guillemot在一份声明中说道。 Ubisoft是任天堂Switch的数十个合作伙伴之一。...今年9月底的时候,Guillemot曾宣称任天堂的新游戏机将使任天堂重新“回归比赛”。今年早些时候他就透露过该系统将是易于使用的,且将带来与目前不同的游戏体验。

    1.1K90

    操纵杆控制-使用控制器移动玩家

    在本节中,我们将播放器连接到操纵杆,这样我们就可以用旋钮移动它。我们还将了解触摸,将旋钮重置为其初始状态以及如何控制播放器的位置,以便他始终在X轴上朝向正确的方向。...我们将所有这些作为SKNode和可选模式。 didMove 方法 接下来,我们需要添加一个didMove方法。这是在视图呈现之前通过代码自定义我们的场景,并且将是您在运行游戏时首先调用的场景。...touchesBegan 是你的手指和屏幕之间的第一次接触 touchesMoved 是你在屏幕上滑动手指 touchesEnded 是你从屏幕上移开手指的那一刻 让我们通过为每个扩展创建一个方法,...添加重置功能 现在我们已经创建了我们的函数,我们可以将它添加到我们的操纵杆限制条件内的touchesEnded方法中。如果您运行模拟器,您将看到旋钮现在返回其初始位置。...此外,行进的距离与旋钮的x位置相关,因为它一直被按下并且因此在早期初始化的速度为4。 如果您运行模拟器,您将看到我们现在可以使用操纵杆控制我们的玩家在X轴上的移动。

    1.3K10

    初入社会小菜鸟瞬间变身职场老司机,VR培训让你有底气自信应对各种工作

    对于某些在技术方面没有很高要求的工作而言,或许这样仓促的培训没什么大问题。但对于那些在工作中需要员工拥有熟练的操作技能,高效地完成任务,这就要求员工从培训开始就打下坚实的基础。 ?...去年九月,工业培训国际(ITI)发布了一个VR移动起重机模拟器。该模拟器使用Oculus Rift 头盔,拥有两种不同模式:桌面模式以及运动基地模式,这两种全都基于同一个操控系统,拥有5个操纵杆模块。...这5个操纵杆模块能够相互调换。模块化的设计允许使用者自定义增加功能,如力反馈操纵杆,与实际使用的操纵杆相匹配。 ?...安全事故的特殊性使其无法在现实中模拟出来,公司也只能靠传统的安全演练来提升员工的安全意识,但效果并不理想。 ?...不仅如此,VR还能模拟还原以往的安全事故,让员工清楚地了解应对事故的措施,深刻了解安全事故的危险性,以及排查在日常操作中存在的问题。从而规范自己的操作,降低事故发生机率。

    70930

    Linux 【安装配置VM虚拟机】

    安装VM虚拟机   VMware WorkStation 虚拟机软件是一款桌面计算机虚拟软件,让用户能够在单一主机上同时运行多个不同的操作系统。...在图 1-15 中,将客户机操作系统的类型选择为“Linux”,版本为“Red Hat Enterprise Linux 7 64 位”,然后单击“下一步”按钮。 ?...NAT 模式:让 VM 虚拟机的网络服务发挥路由器的作用,使得通过虚拟机软件模拟的主机可以通过物理主机访问外网,在真机中 NAT 虚拟机网卡对应的物理网卡是VMnet8。...仅主机模式:仅让虚拟机内的主机与物理主机通信,不能访问外网,在真机中仅主机模式模拟网卡对应的物理网卡是 VMnet1。把 USB 控制器、声卡、打印机设备等不需要的设备统统移除掉。...在界面中, Test this media & install Red Hat Enterprise Linux 7.0 和 Troubleshooting的作用分别是校验光盘完整性后再安装以及启动救援模式

    4.6K20

    树莓派:人在太空,刚下火箭,诚招小于19岁的代码开发者

    当然,做的是在地球完成不了的那种任务: 从太空中观测并分析地球表面云层、计算太空中空间站的轨道、分析国际空间站内的气温和湿度…… 完成这些任务的代码在地球上编写而成,由Astro Pi收集,然后搭上欧洲航空局的火箭飞往太空...这是一项为19岁以下的青少年们设计的挑战。 在2014年立项时,英国商务部为这项竞赛投入了200万英镑。商务部长Vince Cable表示: 这项挑战将帮助下一代在兴趣中获得工业产业所需要的技能。...△参赛者们在线上模拟器Sense HAT上使用Python进行开发。 这是一项无限激发人的创造力和科学思维的挑战。 ——就像是树莓派的使用者们一直在做的那样。...包括但不限于通过分析云的形成来预测天气模式,通过使用NDVI调查植被覆盖率随时间的减少来评估气候变化的影响,以及研究地球磁场的变化等任务。...从2014到现在 2014年12月10日,一项专门为19岁以下青少年开设的Astro Pi挑战赛在英国正式启动。

    49130

    使用 .NET Core 3.0 进行跨平台 IoT 编程

    RPi2 是一款流行的单板机,可以运行 Linux 或 Windows 10 IoT 核心版操作系统。例如,可以从 adafruit.com 获得该设备。...在电脑上运行时,应用可以使用模拟器。要在模拟和非模拟模式之间切换,我将使用一个命令行参数,它将是一个包含 Y 或 N 字母的字符串。...在模拟模式下,应用仅显示合成的传感器读数。在非模拟模式下,应用将显示从实际传感器获得的值,并且还将按顺序更改 LED 阵列颜色。...首先,解析输入参数,并根据结果调用 SenseHatServiceHelper 的 GetService 静态方法。其次,我显示字符串以通知用户应用是否在模拟模式下工作。...可以看到两个传感器报告的温度几乎相同。湿度和压力也在预期范围内。为了进一步确认一切正常,让我们引入一些更改。为此,请用手遮盖设备。如你所见,湿度将上升。在我的案例中,湿度从 37% 增加到 51%。

    3K10

    驾驶FlightGear进入虚拟天空 【Gaming】

    我选择了默认的Cessna 172p,发现驾驶舱的描述非常准确。 默认机场是檀香山,但您可以在“位置”菜单中通过提供您喜爱的机场的国际民航组织机场代码标识符来更改它。...我发现了一些小型的,本地的,非高耸的机场,如纽约的奥兰和敦刻尔克,以及包括布法罗,奥黑尔和罗利的较大的机场,你甚至可以选择一个特定的跑道。 在“环境”下,你可以调整一天中的时间、季节和天气。...模拟包括高级天气建模和从NOAA下载当前天气的能力。 “设置”提供默认情况下在暂停模式下启动模拟的选项。...同样在“设置”中,您可以选择多玩家模式,该模式允许您在FlightGear支持者允许多个用户在全球服务器网络上与其他玩家一起“飞行”。您必须具有中等速度的internet连接才能支持此功能。...驾驶飞机 为了“飞”我的Cessna,我使用了一个工作良好的Logitech操纵杆。您可以使用顶部“文件”菜单中的选项校准操纵杆。 一言以蔽之,我发现模拟非常精确,图形很棒。

    1.3K20

    JoyStick Shield V1.a库编写+封装

    精华代码,想法就是先假定我们已经知道中心位置了 然后去加减实际的数值,获得一个修正的校准值 /** * 处理的函数,在loop()中不停轮回,它们真累 * */ void JoystickShield...这个“this指针”指向了成员函数作用的对象,在成员函数执行的过程中,正是通过“Ihis指针”才能找到对象所在的地址,因而也就能找到对象的所有非静态成员变量的地址。...this 指针被隐含地声明为: ClassName const this,这意味着不能给 this 指针赋值;在 ClassName 类的 const 成员函数中,this 指针的类型为:const ClassName...在以下场景中,经常需要显式引用 this 指针: 为实现对象的链式引用; 为避免对同一对象进行赋值操作; 在实现一些数据结构时,如 list。...*) 的函数 这样的形式就是回调函数 回调函数是由用户撰写,而由操作系统调用的一类函数,回调函数可以把调用者和被调用者分开,调用者(例如操作系统)不需要关心被调用者到底是哪个函数,它所知道的就是有这么一类函数

    1.6K30

    SpriteKit简介-创建您的第一个iPhone平台游戏

    接下来,我们需要选择保存项目的位置,在我们的示例中,我们将其保存在桌面上,单击“ 创建”。恭喜!你创造了你的第一个游戏。 运行模拟器 让我们运行模拟器以确保我们的项目正常运行。...让我们运行模拟器,看看我们的场景是怎样的。如果您的模拟器中的iPhone处于纵向模式,您可能无法看到整个场景。您需要按Command +向右箭头将iPhone的方向更改为横向模式。...首先,让我们选择player / 0并让我们将物理定义属性中的Body Type从None更改为Alpha Mask并取消选中Allow Rotation。...我们将其Body Type从None更改为Bouncing矩形并取消选中Dynamic,允许旋转和受重力影响。最后,让我们按下Command + R来运行模拟器,你会注意到我们的英雄会触地。...我们将空节点操纵杆命名为。接下来,我们将更改操纵杆节点的位置,-300到其X轴,-100到Y轴。然后,让我们选择文档轮廓上的旋钮和箭头节点,并将它们放入操纵杆节点。这将嵌套他们。

    3.6K30

    E3 2017开幕第二日:大IP+大制作下的游戏大作,要怎样才能俘获玩家的心

    小编了解到,沙漠王国场景相比与城市场景拥有更多的敌人和战斗,而城市场景则有更多基本操作的展示和平台跳跃内容。 现场试玩中提供操作模式也较为固定单一,仅有手持Joy-Con的分离模式。...此外,《使命召唤14:二战》还在多人模式中添加了一个新的Divisions(师)系统,该系统取代了原有的职业系统。...Divisions系统中包含了五个不同的角色:空降兵师、山地师、步兵师、装甲师、远征师。 ? 除了新增的Divisions系统外,玩家还能在现场玩到全新的战争模式。战争模式是一个全新的多人模式。...在内容方面,《神秘海域:失落遗产》在《神秘海域4:盗贼末路》的基础上进一步扩展,不仅拥有《神秘海域4:盗贼末路》中的穿越系统和载具探索,还在游戏中增加了新载具、谜题系统和日记互动等新功能。...在现场提供的《FIFA 18》Switch版试玩Demo中,除了像皇马、切尔西这种明星球队外,还新增了一个大阪钢巴队。

    83090

    IBM340亿美元收购Linux分销商Red Hat

    不论是对于IBM来说,还是在整个开源行业来说,都是一个相当大的手笔。 从历史上来看,这是IBM最大的一笔收购交易,也是开源行业最大的一笔收购交易。 IBM为何重金收购Red Hat?...IBM董事长兼首席执行官罗睿兰(Ginni Rometty)在声明中表示:“收购Red Hat,将会改变行业的竞争格局,它改变了云市场中的一切。”...收购引发的担忧 虽然Red Hat 将作为一个独立的“单位”加入 IBM 的云计算团队,保持其在开源开发中的独立性和中立性。 但在社交媒体上,仍旧弥漫着对这笔交易的质疑与担忧。...Twitter上有网友发表评论称“一家建立在闭源软件上的公司,去收购一个建立在开源上的组织,是不是会带来商业模式的倒退?” ? 他的担心是有道理的。...不过,IBM在声明中一再保证,将会继续致力于Red Hat的开放治理、开源贡献、参与开源社区和开发模式,并继续打造其广泛的开发者生态系统。

    58230

    linux 基础知识介绍(一)

    服务器分类 服务器Server是计算机的一种,是网络中为客户端计算机提供各种服务的高性能的计算机,服务器在网络操作系统的控制下,将与其相连的硬盘、磁带、打印机及昂贵的专用通讯设备提供给网络上的客户站点共享...机柜的尺寸也是采用通用的工业标准 现阶段销售数量最多的服务器 机箱尺寸比较小巧 在机柜中可以同时放置多台服务器 刀片式服务器: 在标准高度的机架式机箱内可插装多个卡式的服务器单元,实现高可用和高密度 更高的密度...在集群模式下,所有的母板可以连接起来提供高速的网络环境,并同时共享资源,为相同的用户群服务 服务器硬件组成及实例 No.....Marc在Marc Ewing大学常把自己的软件命名为Red Hat —Red hat 1, Red Hat 2 用来区别他人的软件....Linux哲学思想 一切都是一个文件(包括硬件) 小型,单一用途的程序 链接程序,共同完成复杂的任务 避免令人困惑的用户界面 配置数据存储在文本中 获取发行CentOS https://

    1.1K30

    Linux系统编程基础

    Red Hat:目前被IBM收购,收费版,目前最大的Linux供应商 CentOS: Red Hat退出的免费版 Ubuntu:界面比较友好 虚拟机 学习Linux系统,就需要有一个可用的Linux系统...借助虚拟化技术,我们可以在系统中,通过软件:模拟计算机硬件,并给虚拟硬件安装真实的操作系统。 这样,就可以在电脑中,虚拟出一个完整的电脑,以供我们学习Linux系统。...,CentOS7.6版本 在VMware中安装CentOS操作系统: 先打开VMware软件 按照步骤创建虚拟机: 点击完成后,即开启了CentOS系统的安装,耐心等待安装完成即可,后续都是自动化的。...mv移动文件 mv 参数1 参数2 如果参数2不存在,则进行改名操作 rm删除文件、文件夹 grep命令 可以通过grep命令,从文件中通过关键字过滤文件行。...vim编辑器的三种工作模式: 如果文件路径表示的文件不存在,那么此命令会用于编辑新文件 如果文件路径表示的文件存在,那么此命令用于编辑已有文件 Linux用户和权限 我们如果不修改的话,就是一直在root

    11810
    领券