我正在与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)
}
[这里是可能的方法-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) {
}
}