”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 为我的 D&D 表构建自定义 Stream Deck:使用自定义 SDK 解决游戏手柄集成问题

为我的 D&D 表构建自定义 Stream Deck:使用自定义 SDK 解决游戏手柄集成问题

发布于2024-11-08
浏览:750

Building a Custom Stream Deck for My D&D Table: Solving Gamepad Integration with a Custom SDK

作为一名热情的龙与地下城玩家和技术爱好者,我决定通过创建一个带有嵌入式屏幕的定制咖啡桌来提升我的游戏设置。该桌子显示地图、代币、播放音效,甚至为玩家展示艺术品。所有这一切都通过一个名为 Foundry VTT 的强大平台运行,该平台与 Roll20 类似,但具有更好的定价模型和广泛的开放模块系统。它非常适合定制您的桌面体验。

在探索增强设置的方法时,我注意到允许流平台与 Foundry 集成的模块。这些工具提供对宏和命令的快速访问,使游戏更加流畅。然而,在看到流甲板的价格(200 欧元!)后,我还没有准备好进行这项投资。

然后我想起一件事——几年前,我建造了一台街机。虽然机器早已被拆除,但我仍然保留着项目中的按钮和控制板。凭借一点创造力和一台 3D 打印机,我通过打印一个带有按钮插槽的小盒子来制作自己的定制“流甲板”。

现在我已经准备好了硬件,但将其与 Foundry VTT 集成是一个挑战。我想在浏览器中使用 Gamepad API 来注册我的按钮按下操作,但令我震惊的是 API 处理输入的方式缺乏灵活性。默认方法是使用 while(true) 循环不断轮询每个按钮的按下状态。虽然这在使用 requestAnimationFrame 的游戏循环中工作得很好,但就我的目的而言,它感觉效率低下,坦率地说,很愚蠢。我想简单地用事件侦听器响应按钮按下,而不是不断地无限循环地检查游戏手柄状态。

这促使我创建了今天分享的 Gamepad SDK。

通过此 SDK,我允许开发人员直接添加按钮按下、释放和轴更改的事件侦听器,从而简化了流程 - 无需轮询。它还支持连接和断开游戏手柄,从而可以轻松与 Foundry VTT 等平台或任何基于浏览器的项目集成。

通过使用此 SDK,任何人都可以将其自定义控制器连接到基于浏览器的应用程序,而无需手动检查游戏手柄状态的麻烦。对于我的 D&D 桌子,现在意味着我可以无缝地使用我的临时流平台来控制游戏中的宏、动作等 - 这一切都归功于几个按钮和一些代码。

如果您有兴趣,请查看 SDK,如果您想解决类似问题,请随时与我们联系!

Github:https://github.com/RamonGebben/Gamepad-SDK
NPM:https://www.npmjs.com/package/@pindakaasman/gamepad-sdk

版本声明 本文转载于:https://dev.to/ramongebben/building-a-custom-stream-deck-for-my-dd-table-solving-gamepad-integration-with-a-custom-sdk-5c2h?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何处理MySQL表名中的特殊字符?
    如何处理MySQL表名中的特殊字符?
    处理MySQL表名中的特殊字符MySQL将某些字符保留为特殊字符,这些字符在不经意使用时可能会与表名发生冲突。在给定的场景中,表名“e!”中的感叹号 (!)数据插入时发生错误。为了解决这个问题,MySQL 允许在使用特殊字符时用反引号 (`) 将表名括起来。这有效地“转义”了特殊字符,并允许将其识别...
    编程 发布于2024-11-08
  • 了解 JVM 锁优化
    了解 JVM 锁优化
    并发对于开发可以执行多个并发操作的健壮、可扩展的应用程序非常关键。然而,为此需要付出同步方面的代价。由于获取和释放锁的随之而来的开销,它会产生性能成本。为了减轻这些性能成本,JVM 中融入了多种优化,例如偏向锁定、锁定消除、锁定粗化以及轻量级和重量级锁定的概念。 在本文中,我们将更详细地了解这些优化...
    编程 发布于2024-11-08
  • 测试驱动开发 (TDD):一种严格的软件开发方法
    测试驱动开发 (TDD):一种严格的软件开发方法
    定义 TDD 测试驱动开发(TDD)是一种软件开发方法,强调在编写生产代码之前编写测试。这是一种严格的方法,通过测试推动开发,有助于确保高质量的代码。 理解 TDD TDD 是一个循环过程,涉及三个关键步骤: 红色:编写定义代码所需行为的失败测试。此步骤有助于澄清需求并确保测试集中于期望的结果。...
    编程 发布于2024-11-08
  • 接口
    接口
    在面向对象编程中,定义类应该做什么是有用的,但定义类应该做什么是有用的。 抽象方法定义了方法的签名而不提供实现,子类必须实现该方法。 Java 中的接口允许您将应该做什么的定义与如何做的实现完全分开。 接口可以指定没有主体的方法,该方法必须由类实现。 实现一个接口的类的数量没有限制,一个类可以实现...
    编程 发布于2024-11-08
  • 在GoClipse中调试Go程序时如何避免进入汇编代码?
    在GoClipse中调试Go程序时如何避免进入汇编代码?
    使用汇编代码在 GoClipse 中调试 Go 程序尝试在 GoClipse 中调试 Go 程序时,用户可能会遇到调试器无法正常运行的问题单步执行汇编代码而不是 Go 代码。尽管正确安装了 gdb 进行调试,但还是会出现这种情况。设置断点并通过 Eclipse 调试器运行程序时,它会输入“rt0_d...
    编程 发布于2024-11-08
  • 在 JavaScript 中生成数字范围
    在 JavaScript 中生成数字范围
    生成一个整数数组,并用从起始数字开始到结束数字结束的连续值填充该数组。 解决方案 function range(start, end) { const rangeArray = Array.from( {length: Math.ceil(end - start 1...
    编程 发布于2024-11-08
  • 为什么我的 PHP Curl 脚本中会出现“CURL 错误:接收失败:连接由对等方重置”错误?
    为什么我的 PHP Curl 脚本中会出现“CURL 错误:接收失败:连接由对等方重置”错误?
    CURL ERROR: Recv failure: Connection Reset by Peer - PHP Curl遇到“CURL ERROR: Recv failure: Connection Reset by PHP Curl 中的“peer”错误可能会令人困惑。以下是解决此问题的潜在原因...
    编程 发布于2024-11-08
  • 如何使用 SimpleDateFormat 解析带有“Z”文字的日期?
    如何使用 SimpleDateFormat 解析带有“Z”文字的日期?
    在 SimpleDateFormat 日期解析中处理 'Z' 文字在日期解析领域,'Z' 文字具有特殊的意义。它用作指示指定时间使用 UTC 作为参考点的标记。然而,使用 SimpleDateFormat 解析带有此文字的日期可能会对某些特定模式带来挑战。正如您所遇到...
    编程 发布于2024-11-08
  • 检索表单输入时如何处理空 $_POST 值
    检索表单输入时如何处理空 $_POST 值
    检查 $_POST 空值通过 $_POST 从表单检索用户输入时,验证该值是否为空至关重要空或为空。否则可能会导致意外行为或安全漏洞。在提供的代码中,条件 if(!isset($_POST['userName'])) 检查 'userName' 键是否存在于$_POS...
    编程 发布于2024-11-08
  • 状态和道具:掌握 React Native 应用程序中的数据流
    状态和道具:掌握 React Native 应用程序中的数据流
    如果您是 React Native 或 React 新手,您一定会遇到过“state”和“props”这两个词。了解这两者对于开发动态且适应性强的移动应用程序至关重要。我们将在这篇博客文章中深入探讨 state 和 props,检查它们的差异,并学习如何有效处理 React Native 应用程序中...
    编程 发布于2024-11-08
  • 实时 API 设计:Node.js 最佳实践(指南)
    实时 API 设计:Node.js 最佳实践(指南)
    Node.js 因其事件驱动架构和非阻塞 I/O 模型而成为构建实时 API 的流行选择。 根据最新的使用统计数据,全球有超过 1500 万开发者在使用 Node.js,其中 67% 的企业报告成功采用了该技术。 使用 Node.js 构建的实时 API 为各种应用程序提供支持,从实时聊天和协作工具...
    编程 发布于2024-11-08
  • 使用 Kubernetes、Helm 和 Ingress 部署监控堆栈
    使用 Kubernetes、Helm 和 Ingress 部署监控堆栈
    观察和管理 Kubernetes 集群的性能对于维护应用程序运行状况、识别问题和确保高可用性至关重要。我将引导您使用 kubectl 和 Helm 设置全面的监控解决方案,将 Grafana、Loki 和 Prometheus 部署到集群,以及设置 Ingress 以进行外部访问。 我们将介绍以下关...
    编程 发布于2024-11-08
  • 使用 Unity 创建增强现实应用程序
    使用 Unity 创建增强现实应用程序
    介绍 随着智能手机的兴起和 3D 图形的进步,增强现实 (AR) 近年来已成为一项流行技术。它允许用户与现实世界中的数字元素交互,创造身临其境的、引人入胜的体验。 Unity 是创建 AR 应用程序最强大的工具之一,它是一种广泛应用于游戏行业的游戏引擎。在本文中,我们将探讨使用 U...
    编程 发布于2024-11-08
  • JavaScript 如何提供原生 JSON 解析和序列化?
    JavaScript 如何提供原生 JSON 解析和序列化?
    浏览器原生 JSON 解析和序列化window.JSON 对象在现代浏览器中提供原生 JSON 支持,包括 Internet Explorer 8 、 Firefox 3.1、Safari 4 和 Chrome 3。该对象公开两个方法:JSON.parse(str)解析 JSON 字符串 str 并...
    编程 发布于2024-11-08
  • 使用 STMMCU 实现静电除尘器控制器的 SPWM ase/ase 逆变器
    使用 STMMCU 实现静电除尘器控制器的 SPWM ase/ase 逆变器
    前段时间提到中频电除尘器控制器,我仔细分析了单相和三相SPWM驱动时间,完成了STM32F103处理器上SPWM代码的编写,并用示波器测试了信号和波形,逻辑分析仪。 STM32F103的TIMER1和TIMER2支持互补的PWM输出,我选择TIMER1的CH1、CH2、CH3用于A、B、C三相驱动;...
    编程 发布于2024-11-08

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3