Re: [程式] 前、后端物理运算一致性

楼主: LayerZ (無法如願)   2021-02-02 01:48:44
推 LayerZ: 认真回一下,基本上是不可能做到前后端同步的,如果做得到 01/31 14:06
→ LayerZ: 就已经突破云端游戏瓶颈了 01/31 14:06
→ LayerZ: 一般有两种做法,一种是控制变量常数,Client端物理表演, 01/31 14:07
→ LayerZ: Server端验算 (目前常见短连线游戏),一种是资料Server端 01/31 14:07
→ LayerZ: 为主,Client仅依照Server端送下来的资讯作出表演,如何用 01/31 14:08
→ LayerZ: 这些资讯让表演逼真是另一个领域了 01/31 14:08
→ LayerZ: (MMO之类) 01/31 14:08
→ LayerZ: 至于你说的作弊,作弊抓的到就好,指要让他正常游玩不会出 01/31 14:09
→ LayerZ: 问题就没关系,至于玩家不管用任何手段作弊,只要server端 01/31 14:10
→ LayerZ: 抓得出来(各种验算) 就能即时处理掉 01/31 14:10
>>请问你说的变量常数主要是控制哪些部分?(是指物理参数吗?)
>>目前想到的方法好像是比较偏向你说的方法2
>>我打算在Client跟Server都用Box2D去创建一个游戏世界(world)
>>并且让Client跟Server端的world尽可能保持在一致的状态
>>当玩家进行游戏操作后
>>Client会将该操作的RPC封包送至后端
>>后端接收封包后后产生结果(使用物理引擎计算路径并且包含乱数因素)并回传前端作演示
>>但这样似乎有可能会碰到浮点数精准的问题(?)
基本上不会在后端用物理引擎的..
假如有同时10000人游玩,那么你的后端就要同时模拟10000场游戏,很明显是不切实际的
>>另外场面上如果有移动性的Body
>>似乎也会导致无法单靠物理参数就导出同样的结果
>>
移动性? 从什么时候开始移动,从哪里开始,方向往哪里,什么时候转弯
甚至随机移动的种子是多少,都是可以固定下来的常数
举个例子,高尔夫球游戏,理论上只要角度跟力道两个变量不变,打出去的结果就要是
固定的,而玩家怎么打就是这游戏的变量 (量角器拿出来
因此理论上,控制好常数与变量,就能知道结果,甚至将结果记录下来,后来的用查表法
直接给你答案
___
不过上面是理论上的东西,实务上,后端真的需要知道精确的结果吗,验证的时候也不用
到100%精确,只要能确定是否合法就好
假设有个游戏
分数落在 0~100分之间,突然来个10000分的肯定有问题 (异常封包)
平均分数60~80,突然有玩家拿个100分再来查也没关系,甚至不需要去查
为什么? 你要去靠动作查玩家怎么达到的,那玩家直接作弊做出能达到的动作,你在后端
就查不到任何东西 (详见FPS外挂战争,可以另开一个专题了XDD)
楼主: LayerZ (無法如願)   2020-01-31 14:06:00
认真回一下,基本上是不可能做到前后端同步的,如果做得到就已经突破云端游戏瓶颈了一般有两种做法,一种是控制变量常数,Client端物理表演,Server端验算 (目前常见短连线游戏),一种是资料Server端为主,Client仅依照Server端送下来的资讯作出表演,如何用这些资讯让表演逼真是另一个领域了(MMO之类)至于你说的作弊,作弊抓的到就好,指要让他正常游玩不会出问题就没关系,至于玩家不管用任何手段作弊,只要server端抓得出来(各种验算) 就能即时处理掉
作者: v86861062 (数字人:3)   2021-02-02 12:17:00
:D
作者: SecondRun (雨夜琴声)   2021-02-05 00:59:00
我也在想多几个玩家他server就要死了吧XD

Links booklink

Contact Us: admin [ a t ] ucptt.com