1

嗨,我正在构建一个使用 gamekit 框架的游戏,但我无法使用“sendDataToAllPlayers”发送到 int,它无法区分我发送的两个 int。这是我的一些代码:

typedef enum {
kMessageTypeRandomNumber = 0,
kMessageQN = 0,
kMessageTypeGameBegin,
kMessageTypeSelectAnswer1,
kMessageTypeSelectAnswer2,
kMessageTypeSelectAnswer3,
kMessageTypeGameOver
} MessageType;

typedef struct {
    MessageType messageType;
} Message;


typedef struct {
    Message message;
    uint32_t randomNumber;
    int SelectedQ;
} MessageRandomNumber;

以下是发送方法:

-(void)sendTheSelectedRandomQuestionWithQuestion {
    MessageRandomNumber message;
    message.message.messageType  = kMessageQN;
    message.SelectedQ = randomSelectedQuestion;
    NSData *data = [NSData dataWithBytes:&message length:sizeof(MessageRandomNumber)];
    [self sendData:data];
}



- (void)sendRandomNumber {
    //ourRandom = arc4random()%100;
    MessageRandomNumber message;
    message.message.messageType = kMessageTypeRandomNumber;
    message.randomNumber = ourRandom;
    NSData *data = [NSData dataWithBytes:&message length:sizeof(MessageRandomNumber)];
    [self sendData:data];
}

- (void)sendData:(NSData *)data {
    NSError *error;
    BOOL success = [[GCHelper sharedInstance].match sendDataToAllPlayers:data withDataMode:GKMatchSendDataReliable error:&error];
    if (!success) {
        NSLog(@"Error sending init packet");
        [self matchEnded];
    }
}

下面是didreceivedata方法:

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

    //Store away other player ID for later
    if (otherPlayerID == nil) {
        otherPlayerID = playerID;
    }

    Message *message = (Message *) [data bytes];

     if (message->messageType == kMessageQN) {
     NSLog(@"Received The Selected Question To Display");
     debugLabel.text = @"received the selected q";
     MessageRandomNumber * messageSelectedQuestion = (MessageRandomNumber *) [data bytes];
     NSLog(@"The Selected Question is number: %ud",messageSelectedQuestion->SelectedQ);
     randomSelectedQuestion = messageSelectedQuestion->SelectedQ;
     [self displayTheSlectedQuestion];
     } else if (message->messageType == kMessageTypeRandomNumber) {

        MessageRandomNumber * messageInit = (MessageRandomNumber *) [data bytes];
        NSLog(@"Received random number: %ud, ours %ud", messageInit->randomNumber, ourRandom);

        bool tie = false;
        if (messageInit->randomNumber == ourRandom) {
            //NSLog(@"TIE!");
            ourRandom = arc4random();
            tie = true;
            [self sendRandomNumber];
        } else if (ourRandom > messageInit->randomNumber) {
            NSLog(@"We are player 1");
            isPlayer1 = YES;
            //[self sendTheSelectedRandomQuestionWithQuestion];
        } else {
            NSLog(@"We are player 2");
            isPlayer1 = NO;
        }

        if (!tie) {
            receivedRandom = YES;
            if (gameState == kGameStateWaitingForRandomNumber) {
                [self setGameState:kGameStateWaitingForStart];
            }
            [self tryStartGame];
        }

    } 
    }
}

但是由于某种神秘的原因,每次我打电话给sendTheSelectedRandomQuestionWithQuestion它时,它都认为它是randomNumber而不是SelectedQ?任何人都可以帮助我吗?

4

1 回答 1

0

好的,刚刚发现问题。它应该是:

typedef enum {
kMessageTypeRandomNumber = 0,
kMessageQN = 1,
kMessageTypeGameBegin,
kMessageTypeSelectAnswer1,
kMessageTypeSelectAnswer2,
kMessageTypeSelectAnswer3,
kMessageTypeGameOver
} MessageType;

代替:

typedef enum {
kMessageTypeRandomNumber = 0,
kMessageQN = 0,
kMessageTypeGameBegin,
kMessageTypeSelectAnswer1,
kMessageTypeSelectAnswer2,
kMessageTypeSelectAnswer3,
kMessageTypeGameOver
} MessageType;
于 2012-11-18T13:57:58.660 回答