首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gamekit框架:发送int?

Gamekit框架:发送int?
EN

Stack Overflow用户
提问于 2012-11-18 12:28:09
回答 1查看 197关注 0票数 1

嗨,我正在构建一个使用gamekit框架的游戏,但我在使用"sendDataToAllPlayers“发送到int时遇到了问题,它无法区分我发送的两个int。下面是我的一些代码:

代码语言:javascript
复制
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;

以下是发送方法:

代码语言:javascript
复制
-(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];
    }
}

以下是didreceivedatamethod:

代码语言:javascript
复制
- (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?有谁能帮帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-18 21:57:59

好了,我刚刚搞清楚了问题所在。它应该是:

代码语言:javascript
复制
typedef enum {
kMessageTypeRandomNumber = 0,
kMessageQN = 1,
kMessageTypeGameBegin,
kMessageTypeSelectAnswer1,
kMessageTypeSelectAnswer2,
kMessageTypeSelectAnswer3,
kMessageTypeGameOver
} MessageType;

而不是:

代码语言:javascript
复制
typedef enum {
kMessageTypeRandomNumber = 0,
kMessageQN = 0,
kMessageTypeGameBegin,
kMessageTypeSelectAnswer1,
kMessageTypeSelectAnswer2,
kMessageTypeSelectAnswer3,
kMessageTypeGameOver
} MessageType;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13437490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档