1

こんにちは私はゲームキットフレームワークを使用するゲームを構築していますが、「sendDataToAllPlayers」を使用してintに送信するのに問題があり、送信している2つの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;

以下はsendメソッドです。

-(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 に答える