gpt4 book ai didi

ios - 为什么我的委托(delegate)函数 didReceive Data 没有在 Swift 中被调用?

转载 作者:行者123 更新时间:2023-11-29 01:47:34 25 4
gpt4 key购买 nike

我正在制作一款多人实时 Game Center 游戏,我正在使用本教程 http://www.raywenderlich.com/60998/game-center-tutorial-how-to-make-a-simple-multiplayer-game-with-sprite-kit-part-2 .我一直走到控制台中显示“匹配已成功开始”的部分。应该调用的下一个委托(delegate)函数是 didReceiveData 函数,但它从未被调用过。我完全按照教程中的说明进行了操作,但它对我不起作用。

    //MultiplayerNetworking.swift
func match(match: GKMatch!, didReceiveData data: NSData!, fromRemotePlayer playerID: GKPlayer!) {



let message = UnsafePointer<Message>(data.bytes).memory

if(message.messageType == MessageType.kMessageTypeRandomNumber) {
let messageRandomNumber = UnsafePointer<MessageRandomNumber>(data.bytes).memory

println("Received random number: \(messageRandomNumber.randomNumber)")

var tie = false

if(messageRandomNumber.randomNumber == _ourRandomNumber) {
println("Tie")
tie = true
_ourRandomNumber = arc4random()
self.sendRandomNumber()
}
else {
var dictionary = ["\(playerIDKey)":"\(playerID)", "\(randomNumberKey)":"\(messageRandomNumber.randomNumber)"]
self.processReceivedRandomNumber(dictionary)
}

if(_receivedAllRandomNumbers) {
_isPlayer1 = self.isLocalPlayerPlayer1()
}

if(!tie && _receivedAllRandomNumbers) {
if(_gameState == GameState.kGameStateWaitingForRandomNumber) {
_gameState = GameState.kGameStateWaitingForStart
}
self.tryStartGame()
}
}
else if(message.messageType == MessageType.kMessageTypeGameBegin) {
println("Begin game message received")
_gameState = GameState.kGameStateActive
self.delegate?.setCurrentPlayerIndex(self.indexForLocalPlayer())
}
else if(message.messageType == MessageType.kMessageTypeMove) {
println("Move message received")
let messageMove = UnsafePointer<MessageMove>(data.bytes).memory
self.delegate?.movePlayerAtIndex(self.indexForPlayerWithId(playerIDKey))
}
else if(message.messageType == MessageType.kMessageTypeGameOver) {
println("Game over message received")
let messageGameOver = UnsafePointer<MessageGameOver>(data.bytes).memory
self.delegate?.gameOver(messageGameOver.player1Won)
}
}


//GameScene.swift


protocol GameKitHelperDelegate {
func matchEnded()
func matchStartedNow()
func match(match: GKMatch!, didReceiveData data: NSData!, fromRemotePlayer playerID: GKPlayer!)

func moveForward()

}

func match(match: GKMatch!, didReceiveData data: NSData!, fromRemotePlayer playerID: GKPlayer!) {



if(_match != match) {

println("works")
return
}
_delegate?.match(match, didReceiveData: data, fromRemotePlayer: playerID)

println("didnt work")
}

最佳答案

您使用的是哪个 iOS 版本?因为它在文档中清楚地说明了以下方法:

- (void)match:(GKMatch *)match didReceiveData:(NSData *)data fromRemotePlayer:(GKPlayer *)player

适用于 iOS8 及以上版本。

而以下方法:

- (void)match:(GKMatch *)match didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID

在 iOS8 中已弃用。

关于ios - 为什么我的委托(delegate)函数 didReceive Data 没有在 Swift 中被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31729531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com