首页 文章

使用ios中的游戏中心在多人游戏中将NSDATA从32位发送到64位

提问于
浏览
2

我正在使用游戏中心开发多人游戏,如果我的设备都是64位或32位,整体代码运行良好,但如果我的一个设备是32位而另一个是64位比发送数据不正确,请帮助我,

提前致谢

- (void)sendDataToPlayers:(void *)data length:(NSInteger)length

{NSError * error = nil;

NSLog(@"lenth %i",(int)data);
NSData *package = [NSData dataWithBytes:data length:length];



[self.currentMatch sendDataToAllPlayers:package withDataMode:GKMatchSendDataReliable error:&error];

[self setLastError:error];

} - (void)match:(GKMatch *)匹配didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID {

[self.transportDataDelegate onReceivedData:data fromPlayer:playerID];

}

2 回答

  • 2

    例如,您可以查看NSJSONSerialization,它允许您以100%可移植的方式将包含字典,数组,数字,字符串和NSNull值的任何字典或数组转换为NSData . 有一种方法可以将字典或数组转换为NSData,另一种方法可以将NSData转换回完全相同的字典或数组 .

  • 2

    我解决了这个问题,通过改变数据包的格式,我发送用户定义结构,它具有不同的数据类型,如整数和字符,当这个发送到其他播放器并从NSdata解码时,它没有像零和null那样接收,

    我改变我的数据包格式,就像现在我发送NSString,

    NSString *moveString =[ NSString  stringWithFormat:@"/,%i,%i,%i,%i",oMoveMade.getFrom(),oMoveMade.getTo(),oMoveMade.getFromsquare(),oMoveMade.getTosquare()];
        NSString *temp = [ NSString stringWithFormat:@"%i,", oMoveMade.getFrom()];
        [moveString stringByAppendingString:temp];
        [moveString stringByAppendingString:[ NSString stringWithFormat:@"%i,",oMoveMade.getTo()]];
        [moveString stringByAppendingString:[ NSString stringWithFormat:@"%i,", oMoveMade.getFromsquare()]];
        [moveString stringByAppendingString:[ NSString stringWithFormat:@"%i", oMoveMade.getTosquare()]];
    
        NSLog(@"movestring %@",moveString);
    
    
     NSData *package = [moveString dataUsingEncoding:NSUTF8StringEncoding];
    
       [self.currentMatch sendDataToAllPlayers:package      withDataMode:GKMatchSendDataReliable  error:&error];
    

    这不是完全解决方案,但在我的情况下,它解决了我的问题,如果有人有更好的解决方案,欢迎帮助我们

相关问题