如何通过GKSession蓝牙发送整数数组

时间:2013-02-24 20:15:47

标签: ios cocos2d-iphone integer nsarray gksession

我遇到通过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];
}

这不起作用,游戏崩溃。

那我在这里做错了什么?

1 个答案:

答案 0 :(得分: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];