Показать счет противника (мультиплеер / GameKit) - Cocos2d - PullRequest
0 голосов
/ 29 мая 2011

Я настроил его так, чтобы он отправлял счет игрока на экран оппонента, чтобы они могли видеть его счет, но он никогда не обновляет значение.Любые идеи?

typedef enum
{
    kMessageTypeRandomNumber = 0,
    kMessageTypeScore,
} MessageType;

typedef struct
{
    Message message;
    int score;
} MessageScore;

@interface GSMultiplayer : CCLayer <GCHelperDelegate>
{
    CCLabelTTF *oppScoreLabel;

    uint32_t ourRandom;
    BOOL receivedRandom;
}
--------------------------------------------
- (void)sendScore
{
    CCLOG(@"Sent Score");
    int oppScore = score;

    MessageScore message;
    message.message.messageType = kMessageTypeScore;
    message.score = oppScore;
    NSData *data = [NSData dataWithBytes:&message length:sizeof(MessageScore)];
    [self sendData:data];
}

- (void)tryStartGame
{
    if (isPlayer1 && gameState == kGameStateWaitingForStart)
    {
        [self setGameState:kGameStateActive];
        [self sendGameBegin];
    }

    [self sendScore];
}

- (void)matchStarted
{    
    CCLOG(@"Match started");        
    if (receivedRandom)
    {
        [self setGameState:kGameStateWaitingForStart];
    } else {
        [self setGameState:kGameStateWaitingForRandomNumber];
    }
    [self sendRandomNumber];
    [self tryStartGame];
}

- (void)match:(GKMatch *)match didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID
{
    Message *message = (Message *) [data bytes];

    if (message->messageType == kMessageTypeScore)
    {
        CCLOG(@"Score Received");

        [scoreLabel setString:[NSString stringWithFormat:@"Score: %d", score]];
        }
    }
}

Кроме того, оценка глобально исключена из основной "GameScene".Я очень новичок в мультиплеере, поэтому помощь очень ценится

Спасибо

1 Ответ

0 голосов
/ 29 мая 2011

Отслеживайте счет самостоятельно и добавьте слой, чтобы отобразить счет .. после того, как игрок сменит сцену, отправьте счет в gamecenter?

Использует ли ваша игра gamekit? Если да, вы можете захотеть взглянуть на пример в игре под названием Infinight. В магазине приложений есть облегченная версия. В ней есть многопользовательский режим gamecenter. Просто играйте с друзьями и посмотрите, как это работает. также отправляет счет игровому центру после игры ..

в функции отправки данных:

   msg.oppScore = score;
            NSData *packet = [NSData dataWithBytes:&msg length:sizeof(charInfo)];


            [sharedData.myMatch sendDataToAllPlayers: packet withDataMode: GKMatchSendDataUnreliable error:&error];

sharedData.myMatch - это GKMatch, на который вы должны ссылаться при запуске игры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...