GameControllerKit

GameControllerKit 是一个 Swift 包,可以轻松地在 iOS、macOS 和 tvOS 上使用游戏控制器。 它提供了一个简单的 API 来连接游戏控制器、读取输入并控制其灯光和触觉反馈。

Swift Package Manager License

要求

安装 (Pakage.swift)

dependencies: [
    .package(url: "https://github.com/0xWDG/GameControllerKit.git", branch: "main"),
],
targets: [
    .target(name: "MyTarget", dependencies: [
        .product(name: "GameControllerKit", package: "GameControllerKit"),
    ]),
]

安装 (Xcode)

  1. 在 Xcode 中,打开你的项目并导航至 FileSwift PackagesAdd Package Dependency...文件Swift Packages添加 Package 依赖...
  2. 粘贴仓库 URL (https://github.com/0xWDG/GameControllerKit) 并点击 Next下一步)。
  3. 点击 Finish完成)。

用法

import SwiftUI
import GameControllerKit

struct ContentView: View {
    /// The game controller kit
    @State
    var gameController = GameControllerKit()

    /// Log
    @State
    var log: [String] = []

    var body: some View {
        VStack {
            Button {
                gameController.set(color: .GCKRandom)
            } label: {
                Text("Random Color")
            }

            Text("Controller: \(gameController.controller?.productCategory ?? "None"), " +
                 "\((gameController.controllerType ?? .generic).description)")
            Text("Last action:\n\(String(describing: gameController.lastAction)).")

            GCKControllerView()
                .environmentObject(gameController)

            List {
                ForEach(log.reversed(), id: \.self) { text in
                    Text(text)
                }
            }
        }
        .padding()
        .onAppear {
            gameController.set(handler: handler)
            UIApplication.shared.isIdleTimerDisabled = true
        }
    }

    /// Handler
    ///
    /// - Parameters:
    ///   - action: action
    ///   - pressed: is the button pressed?
    ///   - controller: which controller?
    public func handler(
        action: GCKAction,
        pressed: Bool,
        controller: GCKController
    ) {
        log.append(
            "\(String(describing: action))(\(action.position.arrowRepresentation)) \(pressed ? "Pressed" : "Unpressed"), " +
            "Controller #id \(String(describing: controller.playerIndex.rawValue))"
        )

        if action == .buttonA && pressed {
            // set to a random color
            gameController.set(color: .GCKRandom)
        }
    }
}

用法演示 App 图片

iOS

C65552DF-04CC-493E-AD73-C385A7CEC53C

MacOS

AA801C52-88A1-4326-A5DC-3A04DF491077

tvOS

Screenshot 2024-08-29 at 14 43 51

联系方式

🦋 @0xWDG 🐘 mastodon.social/@0xWDG 🐦 @0xWDG 🧵 @0xWDG 🌐 wesleydegroot.nl 🤖 Discord

想了解更多关于 Swift 的信息吗? 查看我的博客