簡體   English   中英

為什么我的委托函數didReceiveData沒有在Swift中調用?

[英]Why doesnt my delegate function didReceiveData get called in Swift?

我正在制作多人實時游戲中心游戲,我正在使用本教程http://www.raywenderlich.com/60998/game-center-tutorial-how-to-make-a-simple-multiplayer-game-with-sprite -kit-part-2 我一直到控制台中顯示“匹配已成功啟動”的部分。 下一個應該被調用的委托函數是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中已棄用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM