」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為我的 D&D 表建立自訂 Stream Deck:使用自訂 SDK 解決遊戲手把整合問題

為我的 D&D 表建立自訂 Stream Deck:使用自訂 SDK 解決遊戲手把整合問題

發佈於2024-11-08
瀏覽:188

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]刪除
最新教學 更多>
  • 如何使用 multiprocessing.Manager 在多個進程之間共用結果佇列?
    如何使用 multiprocessing.Manager 在多個進程之間共用結果佇列?
    使用multiprocessing.Manager 在多個進程之間共享結果隊列在多處理中,父子進程之間共享隊列對於通訊和結果檢索至關重要。然而,使用 apply_async 啟動非同步工作進程在共享佇列方面提出了挑戰。 為了克服「佇列物件只能透過繼承在進程之間共享」錯誤,我們可以利用 multipr...
    程式設計 發佈於2024-11-08
  • 如何在Visual Studio Code中設定Python調試的工作目錄?
    如何在Visual Studio Code中設定Python調試的工作目錄?
    如何設定使用 VS Code 的調試器調試 Python 程式的工作目錄? 使用 Visual Studio Code 偵錯 Python 程式時 ( VS Code),指定工作目錄對於確保腳本正確運作至關重要。 要在啟動設定檔(launch.json) 中設定工作目錄,請依照下列步驟操作: 開啟l...
    程式設計 發佈於2024-11-08
  • 為什麼 Matplotlib 的動畫程式碼要使用尾隨逗號?
    為什麼 Matplotlib 的動畫程式碼要使用尾隨逗號?
    揭開Matplotlib動畫中的尾隨逗號:它是逗號運算子嗎? 在使用Matplotlib創建簡單動畫的程式碼片段中,變數行後面可以觀察到逗號:line, = ax.plot(x, np.sin(x))這個逗號讓一些開發者感到困惑,導致有人質疑它是否代表逗號運算子。 消除逗號運算子神話此上下文中的尾隨...
    程式設計 發佈於2024-11-08
  • 在 Laravel 中將花式文本標準化為普通文本
    在 Laravel 中將花式文本標準化為普通文本
    文章源自https://medium.com/@hafiqiqmal93/normalizing-fancy-text-to-normal-text-in-laravel-7d9ed56d5a78 使用者輸入的文字一點也不有趣。隨著 Unicode 在智慧型手機中的出現,用戶現在可以奢侈地(有時甚...
    程式設計 發佈於2024-11-08
  • 4 種頂級 API 測試工具指南
    4 種頂級 API 測試工具指南
    在 API 测试方面,拥有正确的工具可以带来巨大的改变。在本文中,我们将探讨 2024 年可用的一些最佳 API 测试工具,适合各个级别的开发人员。 回声API EchoAPI 是一种新兴且快速发展的 API 开发协作工具。与 Postman 不同,它有几个明显的优势,使其成为 P...
    程式設計 發佈於2024-11-08
  • 如何解決多項目 Gradle 配置中的測試依賴?
    如何解決多項目 Gradle 配置中的測試依賴?
    解決多項目Gradle 配置中的測試依賴關係在Gradle 中處理多項目建置時,必須在跨專案的測試程式碼之間建立有效的依賴關係。考慮專案 A 和專案 B 存在的場景,專案 B 依賴專案 A 的元件。 問題陳述在這種情況下,項目 B 的 build.gradle 可能如下所示:apply plugin...
    程式設計 發佈於2024-11-08
  • 如何在 Rust 中合理地組織你的 Tauri 命令
    如何在 Rust 中合理地組織你的 Tauri 命令
    在建立 Tauri 應用程式時,保持程式碼庫井然有序非常重要,尤其是隨著專案的成長。相信我,作為一個對 Rust 比較陌生的人,我也遇到過不少混亂的情況——花幾個小時把自己從自己挖的坑裡挖出來。如果你跟我一樣,你就會想避免這種情況。那麼,讓我們討論一下如何透過將 Tauri 命令拆分為單獨的檔案來保...
    程式設計 發佈於2024-11-08
  • ## 如何在 Docker 映像中預先快取 Go 依賴項以加快建置速度?
    ## 如何在 Docker 映像中預先快取 Go 依賴項以加快建置速度?
    利用預先快取的依賴關係高效建置 Docker 映像建置 Docker 映像時,最大限度地減少建置時間至關重要。一種策略是快取相依性。然而,這需要先建立依賴項,這可能會很耗時。 有沒有辦法預先建立 go.mod 檔案中列出的多個依賴項? 答案在於利用 Docker 的快取機制。建議的 Dockerfi...
    程式設計 發佈於2024-11-08
  • 如何刪除重複行同時保留最舊的提交?
    如何刪除重複行同時保留最舊的提交?
    管理重複行:保留最舊的提交重複資料會顯著影響任何資料庫的完整性和可用性。在這種情況下,我們的目標是根據subscriberEmail欄位消除重複行,只保留原始提交。 為了在不訴諸表交換技術的情況下實現這一點,我們可以使用以下SQL查詢: delete x from myTable x join m...
    程式設計 發佈於2024-11-08
  • 如何處理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

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3