gpt4 book ai didi

iOS游戏中心游戏不同步

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:13:45 31 4
gpt4 key购买 nike

我一直在为 iOS 构建一个游戏中心游戏,到目前为止它运行良好。我终于开始测试游戏,但(显然)存在一些延迟,这导致游戏不同步。

基本上我有 2 个玩家,每个玩家控制一个游戏角色。游戏角色可以发射火球、冰球等,这些攻击会造成伤害,并且有效果。例如。如果接触,冰球效果会卡住对手 3 秒。火球会造成持续 3 秒的持续火焰伤害。

所以问题是,当我和我兄弟对战时,由于延迟,我的游戏显示我还剩 40 点生命值,而他已降至 0,而在他的设备上,游戏显示我还剩 0 而他有20.

这意味着攻击是在一个设备上注册/碰撞(基于角色/火球的位置)而不是在另一台设备上。反之亦然。

我目前使用的是默认的点对点游戏中心架构。使用客户端-服务器架构(一个人成为服务器)是否可以解决这个不同步的问题?

如果没有,我还有哪些其他的游戏套件 API 选项?

最佳答案

我找到了解决这个问题的方法。

Note: this will be a relatively long answer.

我确实实现的一件事是使用 udp 进行一些不像其他数据传输那么重要的数据传输。例如,由于我每秒发送大约 10 次运动数据,所以我认为如果 10 次中有 1 次或 2 次偶尔丢失一次也没关系。


现在进入实际问题:


所以发生的事情如下 - 因为我使用的是 p2p 架构,所以两个客户端在看到游戏“世界”时都有延迟。这意味着在我的设备上,我看到敌方玩家处于延迟 100-200 毫秒的位置。 (所以他过去 100-200 毫秒实际上在那里)。

这个问题是,当我向敌人发射弹丸时,我看到碰撞,如果碰撞正好在他的 Sprite (他的脚或头)的边缘,在他的屏幕上,他已经过去了那个位置 - 加上 - 我的火球在他的屏幕上出现延迟 100 毫秒。这意味着在他的设备上,他能够躲避我的攻击。这可能发生随机次数,但我猜它可能低于 30% 的时间。 70%,两个设备都看到了碰撞。


解决方案


我想到的是在任一设备发生碰撞时向另一位玩家发送消息。请记住,每台设备都不知道对方是否看到了碰撞。所以我无法知道是两个设备都看到了碰撞,还是只有 1 个,另一个看到了攻击被躲过了。

这意味着每次发生碰撞时我都必须向其他玩家发送消息。现在,由于我构建游戏的方式,当发送碰撞时,我会自动应用碰撞事件(意思是,造成的伤害,发生的射弹效果 - 就像冰箭卡住与之碰撞的玩家一样)这是有问题的,因为如果两个设备都看到碰撞怎么办。这意味着两个设备都在互相发送碰撞消息,并再次应用碰撞。

为了解决这个问题,我为每个法术/攻击添加了一个“法术编号”,当发生碰撞时,我将这个数字与发生碰撞的玩家一起保存为“最后一个碰撞法术编号”。因此,如果该法术发生碰撞,玩家就会知道他/她已经与该特定对象发生碰撞,因此碰撞逻辑不会运行两次。

关于iOS游戏中心游戏不同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32929731/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com