1

我在通过 GKSession 发送整数数组时遇到问题。

我是这样做的:

发送它。

-(void)sendData {
    NSMutableArray *myArray = [[NSMutableArray alloc] init];
    [myArray addObject:[NSNumber numberWithInteger:snakeHead.position.x]];
    [myArray addObject:[NSNumber numberWithInteger:snakeHead.position.y]];
    [myArray addObject:[NSNumber numberWithInteger:direction.x]];
    [myArray addObject:[NSNumber numberWithInteger:direction.y]];
    [myArray addObject:[NSNumber numberWithInteger:bodyOffsetX]];
    [myArray addObject:[NSNumber numberWithInteger:bodyOffsetY]];
    [myArray addObject:[NSNumber numberWithInteger:amountBodies]];


    NSData* encodedArray = [NSKeyedArchiver archivedDataWithRootObject:myArray];

    [snakeSession sendData:encodedArray toPeers:snakePeers withDataMode:GKSendDataReliable
                                                            error:nil];
    [encodedArray release];
}

从调度程序调用 sendData 函数。

去接收它。

-(void)receiveData:(NSData *)data fromPeer:(NSString *)peer inSession:(GKSession *)session
                                                       context:(void *)context {
    NSArray *hisArray = [NSKeyedUnarchiver unarchiveObjectWithData:data];

    snakeHead2.position = ccp([[hisArray objectAtIndex:0] integerValue], 
                          [[hisArray objectAtIndex:1] integerValue]);

    direction2 = ccp([[hisArray objectAtIndex:2] integerValue], 
                          [[hisArray objectAtIndex:3] integerValue]);

    bodyOffsetX2 = [[hisArray objectAtIndex:4] integerValue];
    bodyOffsetY2 = [[hisArray objectAtIndex:5] integerValue];
    amountBodies2 = [[hisArray objectAtIndex:6] integerValue];
}

这不起作用,游戏崩溃。

那么我在这里做错了什么?

4

1 回答 1

2

继承人我会做什么。它甚至发送更少的字节!(快点)

// to send
int snakeHead_position_x = 0;
int snakeHead_position_y = 0;
int direction_x = 0;
int direction_y = 0;
int bodyOffsetX = 0;
int bodyOffsetY = 0;
int amountBodies = 0;

NSString *package = [NSString stringWithFormat:@"%i|%i|%i|%i|%i|%i|%i",
        snakeHead_position_x, snakeHead_position_y, direction_x,
        direction_y, bodyOffsetX, bodyOffsetY, amountBodies];

NSData *data = [package dataUsingEncoding:NSASCIIStringEncoding];
assert(data); // this is critical don't remove!

//printf("sending %u bytes...\n", data.length);

[snakeSession sendData:data toPeers:snakePeers withDataMode:GKSendDataReliable error:nil];


// to retrieve

NSArray *intArray = [[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding] componentsSeparatedByString:@"|"];

int snakeHead_position_x = [intArray[0] intValue];
int snakeHead_position_y = [intArray[1] intValue];
int direction_x = [intArray[2] intValue];
int direction_y = [intArray[3] intValue];
int bodyOffsetX = [intArray[4] intValue];
int bodyOffsetY = [intArray[5] intValue];
int amountBodies = [intArray[6] intValue];
于 2013-03-18T00:27:48.030 回答