1

我正在使用 Game Center 为我的 iOS 游戏实现多人模式。

它几乎是一个回合制 RPG(但它使用实时模型),所以我真的不需要太频繁地发送数据。

我注意到大多数示例使用结构发送数据。一个属性是消息种类,而其他属性只是解释消息的额外参数。

我个人会喜欢发送字典而不是结构,除了易于工作(至少在我的具体情况下)之外,没有什么特别的原因。

我想知道通过 Game Center 发送结构和字典之间的客观差异,这样我就可以衡量它是否真的值得做一个。

一些因素:

  • 这是一款回合制RPG。你等待你的对手发送他们的决定信息。没有什么活力,所以数据交换不是很频繁。如果有的话,我会说玩家通常需要 5 秒才能做出决定。
  • 我所有的数据都以可靠模式发送。
  • 我的字典通常包含大约 3-5 个键,其中的值通常是NSStringNSNumber实例。
4

1 回答 1

0

字典比简单的结构使用更多的空间。使用字典,您有很大的灵活性 -> 您可以在运行时创建字典并发送它,只要字典中的所有对象都是可序列化的。代码也很容易编写。如果您需要发送数组或发送多个您在编译时不知道的对象,则发送字典是一个不错的选择。事实上,如果您知道您在消息中使用的所有对象都是可序列化的,那么您只需要一种可用于所有字典的编码/解码方法。

示例:将 nsdictionary 转换为 nsdata

结构通常使用较少的空间。你需要在编译时定义你的结构——你需要知道你计划发送的数据的结构。您不能动态地执行此操作。如果您需要发送多个数组,则需要事先知道大小,因为您无法在运行时发送多个可变长度数组。

对于您的情况,如果它是“基于回合的”,并且如果在这里或那里几秒钟不会产生太大影响,那么 NSDictionary 可能对您来说更方便。

如果您正在编写第一人称射击游戏或某种需要每秒发送 30 或 60 次数据的动作游戏,那么您将使用尽可能小的格式来发送数据以避免延迟问题。

在理想的世界中,无论是回合制还是 fps,您都不想发送不必要的数据,因为您正在浪费带宽,并且您的应用程序将花费更长的时间来发送/接收消息。最佳方法是创建您自己的格式,以最大限度地减少浪费的位数(例如:如果您知道您发送的数字永远不会大于 10,那么您只使用 4 位来表示它)。但实际上,它可能会使编码这种高效的编码/解码方法变得棘手。

于 2013-11-16T05:14:07.227 回答