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 に答える