观 CSGOMajor 有感:游戏中完全不会发生同时死亡的时候吗?

2022-05-16 21:50:36 +08:00
 CSGO
相比自己娱乐家里玩玩,在职业赛场上,队员是否能完全相信游戏给的判断死亡?狙击枪同时开火的概率完全没有吗?职业队员击杀似乎都是非常接近的时间,如果发生完全相同的时间击杀,游戏应该怎么判断谁死亡?

128tick ,算下来 0.0078125s ,如果真的发生 0.0078125s 两边玩家同时开火,代码应该如何判断?
2434 次点击
所在节点    问与答
22 条回复
arch9999
2022-05-16 21:54:32 +08:00
先死的人打出去的子弹,是没有伤害的。
pkoukk
2022-05-16 21:54:45 +08:00
没怎么打过 csgo ,但是小时候在网吧 cs1.5 的时候,有专门的对狙图
同时身亡概率还蛮高的,可能那会 tick 比较低吧
arch9999
2022-05-16 22:01:05 +08:00
没看后半段,同一 tick 内互相造成致死伤害,CSGO 是随机一人死亡。不过我感觉是先送达数据包到服务端的一方存活。
jsq2627
2022-05-16 23:16:38 +08:00
按照一般程序员的逻辑,在一个 tick 内,肯定是把 buffer 队列里的数据包按顺序逐个处理,那就有先后了

至于 buffer 里这两个包的先后又是怎么确定的,这就涉及 OS 以及上联各级路由器的包转发策略了 :D
jsq2627
2022-05-16 23:21:41 +08:00
万一在 LAN 里两台电脑的包正好同时到达交换机(“同时”指在交换机的一个时钟周期里),如果交换机是按照从端口从左到右从上到下扫描过去,那么左上角端口网线连着的选手一定更具有竞争优势 🤣
XiaoGouBa
2022-05-16 23:29:14 +08:00
死后伤害就没有效判定了,v 社可能在延迟上做了手脚,所以 0.0078125s 同时开火根本不可能发生?
Maboroshii
2022-05-17 00:42:22 +08:00
随缘就行了,没必要计较这么点时间差吧。人类根本无法感知
across
2022-05-17 01:35:52 +08:00
反正最后是在服务器上计算判断,这个又没法并行,事件可能按游戏内时间戳排序,有可能一帧之内两方子弹都命中对方,这种极小概率,要不要一起死都不太影响游戏性。
Mutoo
2022-05-17 06:17:47 +08:00
有些游戏的结束判定并不是每帧计算的,而是每 N 帧判定,例如 N=30 ,这种情况是可以判定平局的。这种小概率事件没有什么必要,真正的高手比赛赛制也不会是简单的一局定输赢。
xtreme1
2022-05-17 09:23:50 +08:00
@jsq2627 我觉得到不了这么底层.. 完全看哪个 client 的 index 比较小
kop1989smurf
2022-05-17 09:27:05 +08:00
首先,明确两个概念。

1 、服务器端其实没有极端的“同时”概念,客户端互斥的操作逻辑关系可以靠队列。(所以会出现玩家游戏体验与游戏判定不符的情况,比如你还没看到人,你就已经死了)
2 、业务判断很大程度上不能只依赖 1tick 。(因为 1tick 不可靠,只依赖 1tick 很容易出现意料之外的效果,比如吞子弹)

明确了这两个概念之后,是不是相对逻辑就明晰了?
业务上,互杀可以实现,也可以不实现,纯看需求(判定规则)。

至于说“这样是否公平”,我认为只要判定标准,以及双方延时是一致的(这个延时不一定和 ping 值成线性关系,这要看延时优化),其实就公平。
LaGeNanRen
2022-05-17 09:31:25 +08:00
9 楼说的是对的,首先这实在是太小概率事件了
pvp 时,判定都是上传到服务器的,就像你本地的弹道落点和服务器的弹道落点有差一样,以服务器的为准
比如开镜对狙,假如结果上你是死掉的那个,其实你本地可能按下左键开枪了,甚至看到枪械开枪的动画了,但最后显示你死了,这个时候就是玩家常常说的“怎么我这枪没伤害啊”,这样一想是不是懂了,在打 faceit 之类的国外服务器,延迟比较高的时候会常见一些
两边对枪同时死的情况有,但我大号玩了 1500h ,加上小号还有帮朋友上分,我算总共玩了 2000h 吧,就遇到过一次吧,实在是太小概率了
tukela
2022-05-17 09:36:35 +08:00
还得考虑弹道命中率问题。
弹道不是百分百命中,会漂移。
所以有时候会出现明明打中了,实际上没有中。
glfpes
2022-05-17 09:40:12 +08:00
死后如果无法造成伤害,那的确不可能同时死亡

像 LOL 技能有弹道,经常出现对拼同时死亡的情况
hhaobao
2022-05-17 10:17:19 +08:00
听着很有意思的, 虽然不做游戏服务端开发, 请问各位这方面有啥书可以看一下的?
zjj19950716
2022-05-17 10:30:41 +08:00
同一条直线上,子弹和子弹会不会对冲掉
CSGO
2022-05-17 10:55:24 +08:00
@zjj19950716 😄,看来你没玩过这种游戏,CSGO 压根没有子弹。战地游戏倒有子弹,飞出去还要时间,存在同时死亡。
Senorsen
2022-05-17 12:49:28 +08:00
小时玩 CS1.6 遇到过同时身亡,CSGO 不知。
eGlhb2Jhb2Jhbw
2022-05-17 13:13:05 +08:00
@CSGO #17 没咋玩过,CSGO 没有子弹吗?我咋记得有个视频是开枪了,但是没打中,被反杀了,然后裁判慢放看见是弹起的瓶子挡住了狙的子弹。
across
2022-05-17 15:06:09 +08:00
@eGlhb2Jhb2Jhbw 普通游戏射击验证做射线检测就可以了,不用考虑子弹速度,ak 飘移也是枪口自己歪了,不是弹道弯了。这类不需要子弹,弹壳动画放一放得了。
某些特别武器,比如榴弹枪,rpg 速度慢的,或者写实性强的,专门做弹道物理,然后检查弹道上的碰撞情况。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/853286

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX