首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何平衡多人游戏的开始时间?

如何平衡多人游戏的开始时间?
EN

Stack Overflow用户
提问于 2012-06-12 20:05:32
回答 1查看 374关注 0票数 1

我正在用GameKit做一个多人游戏。我的问题是,当两个设备连接时,游戏开始运行时会有轻微的时间差。在设备上开始运行游戏稍晚一点。但这不是我想要的。我希望它在两个设备上同时启动。所以我要做的第一件事是检查两个设备的开始时间,如下所示:

代码语言:javascript
运行
复制
startTime = [NSDate timeIntervalSinceReferenceDate];

它看起来是这样的:

代码语言:javascript
运行
复制
361194394.193559

然后,我将startTime值发送到另一台设备,然后将收到的值与另一台设备的startTime进行比较。

代码语言:javascript
运行
复制
- (void)balanceTime:(double)partnerTime
{
    double time_diff = startTime - partnerTime;

    if (time_diff < 0)
        startTimeOut = -time_diff;
}

因此,如果两个启动时间之间的差异为负,则意味着此设备启动得更早,因此它必须等待分配给startTimeOut变量的差异,该变量是一个double,通常类似于2.602417。所以我在update方法中暂停了我的游戏

代码语言:javascript
运行
复制
- (void)update:(ccTime)dt
{   
    if (startTimeOut > 0)
    {
        NSLog(@"START TIME OUT %f", startTimeOut);
        startTimeOut -= dt;
        return;
    }
}

但不幸的是,它并没有帮助。此外,它甚至延长了设备的启动时间之间的差异。我就是不明白为什么。看起来我所做的一切都是合理的。我做错了什么?我怎么纠正它呢?你怎么做?非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-13 21:39:00

正如Almo评论的那样,不可能将两个设备同步到同一时间。在最低级别,你会在Heisenberg Uncertainty Principle上咬掉你的牙齿。即使让两台设备在十分之一秒内同步也不是一件容易的事情。此外,时间同步必须或多或少地频繁发生,因为每个设备中的时钟运行时都是略微异步的(即稍微快一点或慢一点)。

您还必须考虑通过Wifi、蓝牙或无线方式发送数据所带来的延迟。此延迟不是常量,可以在一帧中为10ms,在另一帧中为1000ms。你不能抵消滞后,也不能预测它。但是你可以预测玩家的动作。

游戏的解决方案,或者至少其中之一,是客户端预测和死亡推算。This SO question has a few links of interest.

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10996304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档