如何在SwiftUI中提供Game Center配对视图控制器?

问题描述 投票:0回答:1

我正在与SwiftUI和Game Center一起创建多人游戏。用播放器和邀请消息的数量初始化GKMatchmakerViewController后,我无法显示它。我尝试使用按钮调用我的presentMatchmaker()函数,但这不起作用。非常感谢您的帮助!

func presentMatchmaker() {
        guard GKLocalPlayer.local.isAuthenticated else {
            return
        }
        let request = GKMatchRequest()
        request.minPlayers = 2
        request.maxPlayers = 7

        request.inviteMessage = "You have been challenged..."

        guard let vco = GKMatchmakerViewController(matchRequest: request) else {
            return
        }
        self.ViewController?.present(vco, animated:true)
}
swift swiftui game-center
1个回答
0
投票

[这里是可能的方法-GKMatchmakerViewController在SwiftUI表中显示为通过UIViewControllerRepresentable包装:

struct TestGameKitMatchmakerView: View {
    @State var shows = false
    var body: some View {
        Button("Show Matchmaker") {
            guard GKLocalPlayer.local.isAuthenticated else {
                return // report some feedback here, maybe alert
            }
            self.shows.toggle()
        }
        .sheet(isPresented: self.$shows) {
            GameKitMatchmakerView(minPlayers: 2, maxPlayers: 7, inviteMessage: "You have been challenged...")
        }
    }
}

struct GameKitMatchmakerView: UIViewControllerRepresentable {
    let minPlayers: Int
    let maxPlayers: Int
    let inviteMessage: String

    func makeUIViewController(context: Context) -> UIViewController {

        let request = GKMatchRequest()
        request.minPlayers = minPlayers
        request.maxPlayers = maxPlayers
        request.inviteMessage = inviteMessage

        // in case of error, some useful controller can be shown
        return GKMatchmakerViewController(matchRequest: request) ?? UIViewController() // stub for nil
    }

    func updateUIViewController(_ uiViewController: UIViewController, context: Context) {
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.