我是swift和GameCenter的新手。我创建了一个小型多人游戏,需要我在玩家之间传输数据。我不确定如何做到这一点,因为我找到的几乎所有内容都是在Objective-C中,而且我对这两种语言都不太满意,无法将代码从一种语言翻译成另一种语言。
我希望能够发送给另一个播放器并让它们接收它的数据类型是在结构中声明的(x,y)坐标,如此...
struct Point:
{
var x:Int = 0;
var y:Int = 0;
}
在iOS Developer Library中有一个GameCenter编程指南,其中包含以下代码......
- (void) sendPosition
{
NSError *error;
PositionPacket msg;
msg.messageKind = PositionMessage;
msg.x = currentPosition.x;
msg.y = currentPosition.y;
NSData *packet = [NSData dataWithBytes:&msg length:sizeof(PositionPacket)];
[match sendDataToAllPlayers: packet withDataMode: GKMatchSendDataUnreliable error:&error];
if (error != nil)
{
// Handle the error.
}
}
- (void)match:(GKMatch *)match didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID
{
Packet *p = (Packet*)[data bytes];
if (p.messageKind == PositionMessage)
{
// Handle a position message.
}
}
根据我的理解,上面的代码似乎正在完成我想要的项目。
问题
- 如何将上述代码转换为swift并使其与我的Point结构一起使用?
- GC编程指南提及有关消息格式化和使用枚举的示例,以便区分不同的消息。我是否需要对我的结构进行此类更改,即使我将始终发送相同类型的消息?