有多人联机游戏经验的大佬帮忙解决下疑惑,多谢!!!

我在做一个多人联机IO类游戏,采用的是状态同步,所有逻辑基本都在服务器端实现。现在要实现玩家攻击怪物的功能。因为攻击是玩家角色自动产生的,不需要操作界面。有两种实现方式:
1:当玩家遇到怪物时,服务器定时每隔2秒,告诉客户端执行攻击动画,并且计算伤害。
2:当玩家遇到怪物时,客户端自动播放攻击动画,并把攻击消息告诉服务器,服务器计算伤害。

请问哪种实现方式比较标准?

1赞

3.当玩家遇到怪物时,并把攻击消息告诉服务器,服务器计算伤害,发送信息给客户端自动播放攻击动画。这才是标准的状态同步

逻辑在服务端,客户端等通知就行

ok,没有攻击按键,攻击行为是自动的,玩家只控制移动,也就说服务器判断玩家和怪物位置,符合条件进行攻击伤害计算,并告知客户端播放动画。也就是我的第一种方案。多谢!

yes,一切指令都是服务端下发进行同步,如果是弱同步,可以服务端全部算好给你,你自己做流程演示

但是感觉服务器攻击的时候,需要启动定时器,定时发送指令告诉客户端播放动画。感觉这个有点别扭! :rofl:

这我就不太明白了, 如果是自动攻击, 那前端一様可以预测播放攻击动画, 也不需要发消息给服务端, 因为服务端是知道啥时攻击的, 怪物是消失/扣血是服务端説了算, 服务端直接下发事件就好,基本上在网好的情况下预测凖确度起码有95%, 网不好时顶多表现就是攻击动画播了, 但怪物没死已而

我理解你的意思是:服务器判断玩家和怪物可以攻击了,然后服务器只下发一次攻击指令,客户端就一直loop在那攻击,直到服务器发现不符合攻击条件,再下发一次停止攻击指令,客户端停止攻击行为。

所以我也疑惑,要不要每次攻击动作,都是服务器控制下发指令。 :innocent:
但是可以肯定是,肯定是服务器判断是否攻击,告诉客户端,不能客户端判断是否可以攻击,告诉服务器。

客户端不用loop呀, 比如判断怪靠近了, 就播放砍一刀就好, 服务计算某怪死亡/扣血, 下发给前端渲染死亡/扣血动画, 不同在于前端有砍一刀的动画时间, 你理解为这个动画其实就是在等服务端的下发事件, 服务端计算不用计算动画时间, 只需要一发现有怪的坐标符合用户怪的攻击距离, 计算攻击结果就好了

–客户端不用loop呀, 比如判断怪靠近了, 就播放砍一刀就好。
这个判断是客户端不行吧,需要服务器判断。状态同步得以服务器为准吧,不能进行预测。
帧同步可以预测,回滚,和解。状态同步一定是存在操作延迟得。不知道我理解的对否。

谁説状态同步不能预测的, 看你预测些甚麽,你又不是预测结果, 你只是预测事件。 不要自己限死自己思维。状态同步的是同步结果, 动画只是表现过程, 服务端是不管这个, 你砍一刀的动画存在意义就是为了延迟等待服务端的结果, 你先播, 怪死不死有甚麽影响? 你播了砍一刀, 服务端説不算, 你前端也不用回滚呀, 在场上的怪兽数量没影响。 而且在网络正常情况下基本上出错率很低, 你优先确保网好的用户有最良好睇验, 网差的可以优化体验好一点就好, 没有游戏会去考虑让网差的用户也有100%良好体验

你可以看看这个https://demo.luk.live/snake/
贪食蛇, 断网情况下蛇是可以穿墙, 因为人家做了移动预测, 但吃不了豆, 因为没有服务端的结果下发。人家也是前端先移动, 上报服务端, 服务端回应了不正常蛇才回跳回服务端回应的位置, 否则继续走, 确保了游戏的流畅性。 人家也是状态同步, 帧同步和状态同步一様有预测, 回滚, 插值, 只是实现方式与维度不一様而已。

明白点,但是如果这样得话,前端也需要实现逻辑计算,前后端都需要实现。前端是为了预测用。后端才是权威得。有点麻烦。这种IO类得游戏,感觉没必要为了一点点延迟,前端再实现所有操作逻辑吧 :innocent:

如果是强同步的mmo,那么服务器就是一个没有渲染的游戏逻辑系统,你可以在前端模拟写一个逻辑和表现分离的demo。

只有移动会在前端做预测,攻击什么的也可以,只不过太复杂,没必要。

FPS,英雄联盟类的,是不是攻击和技能也做了预测。感觉那个对操作反应要求很高啊

比如:球球大作战,分球,吐球,这种做没做预测呢?

具体他们怎么实现,我也不知道,如果什么都做预测,那么就是前端和后端都跑同一套逻辑。我感觉没必要。现在网络条件正常的话,那几十毫秒的延迟是不影响你的操作的。

你说的这几个应该是用帧同步的
状态同步适合数据交互不是这么频繁,数据量也不大的,比如棋牌、MMORPG

如果你要验证一个网络游戏是怎么实现的(比如WOW)你就进入游戏,干掉网络,等没给你强制等出前,操作一下。魔兽中可以移动,但放不出技能,也就是说,魔兽的移动在前端做了预测,技能没有。