0
試圖使用GameKit和GKMatch編寫一個小型實時紙牌遊戲。 我已經按照this Game Center tutorial(在Objective-C),但現在卡住試圖將其轉換爲雨燕2.通過NSData發送的數據僅部分收到
我枚舉和結構:
enum Messagetype:Int {
case kMessageTypeRandomNumber = 0
case kMessageTypeGameBegin = 1
case kMessageTypeMove = 2
case kMessageTypeGameOver = 3
}
struct Message {
var messageType:Messagetype = .kMessageTypeMove
}
struct MessageRandomNumber {
var message = Message()
var randomNumber: Int = -1
}
var ourRandomNumber:Int = Int(arc4random_uniform(100000))+1
樂趣sendRandomNumber()
func sendRandomNumber() {
var message = MessageRandomNumber()
message.randomNumber = self.ourRandomNumber
message.message.messageType = .kMessageTypeRandomNumber
let data = NSData(bytes: &message, length: sizeof(MessageRandomNumber))
self.sendData(data)
print ("Random number \(message.randomNumber) sent from \(localPlayer.alias!)")
}
FUNC送出數據
func sendData(data: NSData) {
let gameKitHelper = GameKitHelper.sharedGameKitHelper
var succes:Bool? = true
do {
try gameKitHelper.match.sendDataToAllPlayers(data, withDataMode: .Reliable)
} catch {
succes = nil
}
if succes == nil {
print ("Error sending data.")
}
}
FUNC match.didReceiveD ATA
func match(match: GKMatch, didReceiveData data: NSData, fromRemotePlayer player: GKPlayer) {
print ("Data received.")
let message:Message = UnsafePointer<Message>(data.bytes).memory as Message
if (message.messageType == .kMessageTypeRandomNumber) {
let messageRandomNumber:MessageRandomNumber = UnsafePointer<MessageRandomNumber>(data.bytes).memory as MessageRandomNumber
print ("Received random number \(messageRandomNumber.randomNumber)")
}
我可以在一個隨機數<> 0被選擇,並使用sendRandomNumber從設備發送的日誌中看到。
通過didReceiveData步進我看到的是:
- message.messageType = .kMessageTypeRandomNumber(其是從該結構用同樣,該值是在設定sendRandomNumber初始化的值不同,所以我相信這部分得到正確發送)。
- messageRandomNumber.message.messageType = .kMessageTypeRandomNumber(再次正確)
- 然而,messageRandomNumber.randomNumber始終爲0(這是不正確的)
有什麼明顯的,我在這裏失蹤?
謝謝。這是完全有道理的,但我似乎無法在Apple的文檔中找到它(https://developer.apple.com/library/prerelease/ios/documentation/GameKit/Reference/GKMatchDelegate_Ref/index.html#//apple_ref/ occ/intfm/GKMatchDelegate/match:didReceiveData:fromRemotePlayer :) –
哎呀,按下發送太快在移動。你能指出我在正確的方向,我可以找到我應該如何在Swift中做到這一點? –
我可以使用EnumerateByteRangesUsingBlock代替直接訪問bytes屬性嗎? –