【问题标题】:How to keep sync a coop iphone game in cocos2d (+box2d) with gamekit?如何在 cocos2d (+box2d) 中与 gamekit 保持同步合作 iPhone 游戏?
【发布时间】:2011-01-28 12:56:39
【问题描述】:

所以我用 cocos2d 制作了一个 box2d 游戏。用户可以移动玩家,并且在世界上有动态对象。现在我想实现一个合作模式。

我知道有gamekit。

我的想法:

  • 将两个设备之一(或更多..)连接到主机。

  • 如果关卡加载将所有对象的所有位置(静态+动态+玩家位置)发送到其他客户端(iphone/ipods/ipad),现在应该是同步的

但是

我应该制作一个字典,然后将所有对象的位置添加到其中,然后将其转换为 nsdata 对象然后发送它。

够了吗?

我想在没有任何互联网连接的情况下进行 P2P。

我认为唯一的可能性是蓝牙还是有更多?

够了吗?

如果有人能给我一些建议和一些关于如何做到这一点的代码,那就太好了。

感谢阅读 祝你今天过得愉快。

:)

【问题讨论】:

    标签: iphone cocos2d-iphone sync gamekit box2d


    【解决方案1】:

    我认为将主机之一作为服务器是个好主意。因为,如果您为每个人创建连接,那么您将拥有 N*(N-1) 个连接总数,以及每个主机的 (N-1) 个连接。如果您使用服务器,那么服务器只有 N-1 个连接,每个客户端只有 1 个连接。因此,您必须在每个主机上执行完整的模拟,然后将该数据与服务器同步。定期同步的模拟将倾向于在所有计算机上以相同的方式运行。这意味着只需进行少量且不频繁的调整即可使所有用户保持相同。

    编辑:您还应该考虑流量最小化,这就是发送 NSDictionary 太多的原因。你可以发送一些结构,比如

    typedef struct {
       short obj_id;
       float pos;
       float vel;
       float angle;
    } obj_inf;
    

    编辑2:

    obj_info obj1_inf;
    //set the values here ...
    NSData* packet = [NSData dataWithBytes: &obj1_inf length: sizeof(obj_info)];
    
    //if you have an array of obj info (e.g. 20 objects):
    obj_info* oinf_arr = calloc(20, sizeof(obj_info));
    for(int i=0; i<20; ++i) [{
         //fill each oinf_arr[i]
    }
    NSData* packet = [NSData dataWithBytes: oinf_arr length: 20*sizeof(obj_info)];
    

    可能您想在数据包中添加一些标头并在那里放置对象的数量等。

    【讨论】:

    • 你制作的小结构。怎么用?你能做一个很少的样本吗……你甚至不需要在样本中使用gamekit。谢谢。编辑:如何将结构转换为 nsdata 并返回?
    • 你能说一下如何访问结构的pos,vel等吗?抱歉,但我无法正确测试它,因为我现在没有 Mac ;)。是对的吗? obj1_inf.pos
    【解决方案2】:

    是的,在这种情况下,蓝牙是您唯一的选择。

    关于将一台设备设置为主机等,Apple 提供了sample code,可以帮助您入门。

    根据我的经验,仅由于性能问题,蓝牙在动作游戏中非常不可靠,尤其是当 Wi-Fi 处于活动状态时,这是您无法控制的。如果您的游戏依赖于在时间方面非常紧密同步的游戏,我会尽一切努力减少通过蓝牙传输的数据量。这意味着不断发送你的整个游戏状态可能还不够好。您想同步您的游戏,在每台设备上设置世界,然后只发送玩家输入。

    【讨论】:

      猜你喜欢
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多