Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用游戏中心交换实现聊天_Ios_Iphone_Objective C_Game Center_Gamekit - Fatal编程技术网

Ios 使用游戏中心交换实现聊天

Ios 使用游戏中心交换实现聊天,ios,iphone,objective-c,game-center,gamekit,Ios,Iphone,Objective C,Game Center,Gamekit,苹果在iOS 7中为基于回合的多人游戏引入了“交换”。他们提到的一个可能的应用是聊天功能。因此,我一直在尝试使用Exchange为我的游戏实现聊天功能,但Exchange似乎并不适用于此。由于苹果公司特别提到了这一点,我想也许我的方法是错误的 我的方法是为每条聊天信息发送交换请求,请求中嵌入消息文本。另一个播放器接收请求,提取消息并将其保存在本地,然后回复到exchange以完成它。最后,将要发送回合的玩家需要首先检查是否有任何已完成的交换并解决它们。我对这种方法的一些问题是: 游戏中心发送

苹果在iOS 7中为基于回合的多人游戏引入了“交换”。他们提到的一个可能的应用是聊天功能。因此,我一直在尝试使用Exchange为我的游戏实现聊天功能,但Exchange似乎并不适用于此。由于苹果公司特别提到了这一点,我想也许我的方法是错误的

我的方法是为每条聊天信息发送交换请求,请求中嵌入消息文本。另一个播放器接收请求,提取消息并将其保存在本地,然后回复到exchange以完成它。最后,将要发送回合的玩家需要首先检查是否有任何已完成的交换并解决它们。我对这种方法的一些问题是:

  • 游戏中心发送 答复exchange请求时的通知。那么如果玩家1 向播放机2发送聊天信息,然后播放机1将收到 播放机2收到消息时发出通知。没有 似乎是一种禁用回复事件通知的方法,因此如果应用程序关闭或在后台,玩家1将获得游戏中心横幅
  • 为了解决交换问题,我需要调用
    saveMergedMatchData:withResolvedExchanges:completionHandler:
    ,它将更新的游戏数据发送到游戏中心。但在这种情况下,游戏数据保持不变,因此我不得不不必要地上传额外的数据,当玩家的互联网连接不好时,这可能会很昂贵
  • 在解决所有开放交换之前向游戏中心发送回合将导致错误。因此,所有的交流都需要首先解决。GKTurnBasedMatch对象包含一个数组“exchanges”,其中包含所有未解析的交换,但是如果其他玩家已经回复了我们的一个交换,那么该数据可能已经过时。因此,我需要再次下载当前匹配的匹配数据,以检查未解决的交换,然后才能轮到我

有没有更好的方法使用Exchange实现聊天功能

我想用交换来传送单位的移动。例如,在玩家A完成他们的回合后,玩家B传送每个单位的移动,以便玩家A观察正在发生的事情。这本身不是聊天,但消息模式非常相似。我遇到了你描述的所有三个相同的问题。我已经设法破解了#2和#3,但bullet#1中不断出现的游戏中心通知让我确信,对于任何异步应用程序来说,交换都是毫无价值的。