Я использую оператор регистра переключателя, чтобы определить, какие данные я получаю в многопользовательском игровом центре.
Я не вижу, что с ним не так, но при добавлении второго оператора case он перестает работать.
Я объявил это:
typedef enum
{
kPacketTypeScore,
kPacketTypeReady,
} EPacketTypes;
typedef struct
{
EPacketTypes type;
size_t size;
} SPacketInfo;
typedef struct
{
SPacketInfo packetInfo;
int score;
} SScorePacket;
typedef struct
{
SPacketInfo packetInfo;
bool ready;
} SReadyPacket;
- (void)match:(GKMatch *)match didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID
{
// first, assume it's the general SPacketInfo, that way we can access type and size
packet = (SPacketInfo*)[data bytes];
scoreData *scoreDat = [scoreData sharedData];
BOOL rdyReceived;
switch (packet->type)
{
case kPacketTypeScore:
{
SScorePacket* scorePacket = (SScorePacket*)packet;
[scoreLabel setString:[NSString stringWithFormat:@"You: %d Challenger: %d", scoreDat.score, scorePacket->score]];
break;
}
case kPacketTypeReady:
{
SReadyPacket* readyPacket = (SReadyPacket*)packet;
rdyReceived = readyPacket->ready;
if (rdyReceived == FALSE && scoreDat.mpRdy == TRUE) {
[rdyLabel setString:@"Waiting for challenger..."];
}
if (rdyReceived == TRUE && scoreDat.mpRdy == FALSE) {
[rdyLabel setString:@"Challenger is waiting... Ready?"];
}
if (rdyReceived == TRUE && scoreDat.mpRdy == TRUE) {
[[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:1.0 scene:[mpView node] withColor:ccWHITE]];
}
break;
}
default:
CCLOG(@"received unknown packet type %i (size: %u)", packet->type, packet->size);
break;
}
}