Articles of 同步

与游戏勾号同步

我正在开发一款多人游戏,目前正在设置。 它接受来自客户端的数据包,并执行所需的任何处理。 还有一个主要的游戏勾号是这样设置的: for every online player update every player in the region for every online player reset flags 我看到可能发生的问题是,因为它在运行中处理数据包,它可能会修改更新和标志重置之间的某些内容,这可能导致它完全忽略某些内容。 我不认为有可能使用实际的同步块进行同步,因为它不能同时更新和重置标志 – 它需要在更新每个玩家之后重置标志。 我看到的唯一的解决scheme是不在飞行中处理数据包,并在主循环中执行,但这可能会损害性能。 这是最好的解决scheme,还是有另一种select,我不考虑? 谢谢

帮助服务器高效而平稳地修改多个对象位置

在我的游戏中,客户端上的3d对象的位置必须定期由服务器纠正。 这是通过发送更正,这些更正大多是相对的,有时是绝对的。 相对校正的成本要less得多(7字节),但会快速失步,有时必须用绝对校正(16字节)代替。 该系统必须每秒处理数百个对象,因此保持带宽下降非常重要。 现在,每秒10次(固定更新每秒钟50次),所有移动物体的位置都被修正了。 对于每次修正,90%的对象修正是相对的,10%是绝对的。 这意味着在最坏的情况下绝对校正之间可能会有高达1000ms的漂移。 11000000000000000000 // 1/10 corrects objects 1&2. 00110000000000000000 // 2/10 corrections objects 3&4. 00001100000000000000 // 3/10 corrects objects 5&6, etc. 因此有时会出现抖动。 我想知道什么是平滑这个最好的方法? 考虑以下。 在AG情况下,有20个对象需要纠正。 0是相对校正,1是绝对校正。 情况A花费140个字节来校正具有相对位置调整的20个对象。 情况B花费158字节来更新具有相对更正的18个对象,以及具有绝对更正的2个对象。 这是发送所有绝对更新(情况G)的字节成本的49%,并且在最坏的情况下需要1000毫秒以使杂散物体回到正轨。 A: 00000000000000000000 7×20=140 // 44% every 0 ticks. B: 11000000000000000000 7×18=126 + 16×2=32 = 158 // 49% every 50 ticks (1000ms). […]

在塔防游戏中接近客户端和服务器之间的同步

我目前正在制作一款多人游戏TD,玩家可以参加游戏,并在地图上放置塔,非常好。 这就是今天游戏的运作方式,当一个新的游戏被创建,服务器初始化一个主游戏,基本上所有的逻辑都发生在这里,它告诉客户可视化的东西。 但是这是我的第一个MP游戏,我需要一些关于如何让玩家与服务器游戏同步的建议,我的问题可能是。 “如果玩家与服务器失去联系几秒钟,该怎么办,因此失去同步”“如果玩家的networking连接不好,并且延迟从400毫秒跳到3000毫秒,该怎么办” 我想每秒发送数据给每个客户4次,包含板上所有实体的信息。 然后,我将这些数据与客户端数据进行比较,并且推翻不同步的实体,那么就会有一个容忍的价值,所以用户不会遇到由于小的游戏延迟而在板上发生的变化。 不过,我可以想象这将是一个很大的工作,我想问是否有一个更聪明的解决scheme,我看了一些在networking上的post,但没有find任何适用于我的游戏,感觉自由以我的方式扔链接。

塔防如何同步塔和敌人?

我要建立一个塔防(比赛)的游戏。 在沉重的塔防中,加工需要时间。 所以,如果我设置了一个时间间隔,它会花费间隔+处理时间,所以这是不公平的。 如果我让处理单元每100毫秒运行一次,处理所有事情,这将是公平的,但成本更高。 这对于飞行武器(比如炸弹)来说并不好。 任何其他方式或只是使用100毫秒的过程单位?

Box2D:使其具有确定性?

从networking上的文章中,我发现浮点math一般具有至less6位数的精度。 考虑到这一点,是否有可能通过使用重舍入(即第一个或第二个小数位)使Box2D使用浮点数完全确定性?

MMO播放器位置更新

我一直在看MMO游戏的发展一段时间,并且陷入了一件事情。 球员运动。 如果我们有一个10人的区域,每个玩家需要能够看到其他玩家的方向和位置。 但是当玩家开始移动时,我需要同时更新十个玩家位置。 如果我使用的是MYSQL数据库,每次玩家移动时,发送坐标并从数据库中获取坐标将是缓慢和迟缓的。 这样做的专业和适当(更高效)的方式是什么?

游戏线程,渲染线程,animation/逆向运动学和同步

在一个带有游戏逻辑线程和渲染线程的multithreading设置中,带有一些反向运动加上的皮肤网格animation等animation是如何工作的? 游戏逻辑线程是否更新animation中的时间T,然后渲染线程推断谁拥有皮肤网格animation,游戏逻辑线程或渲染线程? 如果存储在场景图中,它是如何存储的? 当游戏逻辑更新时,它会执行皮肤网格animation的计算和逆运动学的计算,然后将结果直接存储在场景图中,或者间接存储结果,渲染线程执行计算?

在锁步networking游戏中,如何处理突然的滞后和断开连接?

我试图通过使用锁步networking模型来实现类似于“街头霸王”的游戏,使得两个玩家可以通过互联网远程玩。 我已经阅读了很多有关锁步networking方法的文章,我基本上可以实现每一步的转/帧处理。 我的理解是,如果现在轮到101,并且如果玩家A没有收到玩家B的回合101动作(分组),则玩家A必须等待。 当这种情况发生时,玩家B也必须等待,因为玩家A不会向玩家B发出进一步的动作,因为他正在等待。 游戏是否应该为这种情况做点什么? 例如,我看到“星际争霸”这样的游戏,有时会出现一个等待其他玩家的对话,如果倒数到0,玩家可以断开这个挂机。 为了做到这一点,我不明白如何判断谁是滞后的,什么是正确的处理。 玩家A或玩家B都会认为对方因为他目前没有收到数据包而滞后。 我要向用户展示什么? 如果滞后仍在继续,那么如何通过提供正确的游戏结果(迟到的玩家应该被给予损失而另一个玩家应该获得胜利)来提前结束游戏? 就像星际争霸中的倒计时对话框一样。 另一方面,如果情况不是滞后,而是与玩家B断开呢?

用于混合同步和asynchronous程序stream的体系结构,以最大化人造实时但合乎逻辑的游戏玩法?

我试图做的是node.js中的虚拟实时游戏引擎(利用非阻塞I / O)。 当我说'虚假实时'时,我的意思是我希望玩家尽可能地与世界互动,而不会让玩家互相阻碍,或者不得不“排队等待世界”。 也就是说,除非游戏需要它。 例如,在现实生活中,你必须排队等待某些事情,有的像在高速公路的某一段占用空间一样简单。 然而,如果每个人都在自己的空间里,他们可以以独特的速度在自己的车里跳千斤顶或者把甜甜圈旋转起来,这个速度与其他也在采取这些无关行动的人是完全不相关和“并行”的。 相关/同步的行动将是交易,甚至移动。 如果两个玩家进入同一个空间并试图捡起同一个物体,那么突然间如果他们同时到达那里就很重要。 我希望这是有道理的,但我会添加一些代码来尝试举个例子: setInterval(function() { for(var i = 0; i < someArray.length; i++){ someArray[i].QueuedAction(); } someArray = new Array(); }, 1000); 如果每隔1秒我们通过这个数组,然后清空它,我们将实际上有一个同步列表。 当这个循环运行时,可能会有许多事件添加到这个数组中,但是这个循环阻止了这些事件修改数组直到完成并清除了数组。 这将是按顺序发生的事情的列表。 但是,如果这需要太长的时间,那么它也将阻止玩家请求他们当前的位置或者客户端请求玩家周围的物体等等。所以这需要迅速发生,以保持实时的幻觉,但为了保持一个逻辑世界的错觉。 有没有我应该评估的模式,可以改善这个有序的非平衡的世界游戏引擎的平衡?

如何检测客户端状态何时从服务器状态漂移?

我明显在谈论一个权威的服务器,客户端发送命令并获取状态更新。 我的问题是,当我得到一个位置更新,并知道在服务器上生成多less毫秒前, 我如何检测和修复漂移? 我现在只是阻止客户离开最后更新位置太远,顺利地将他移动到那个位置。 哪些工作正常与低ping连接,但不会与200 +平。