关于服务器和客户端的基本有关问题

关于服务器和客户端的基本问题
第一个问题 玩家甲从A点走到B点,我猜测可能有以下两种实现办法
办法1 ,玩家甲的键盘鼠标输入通过客户端转化为各种总运动的请求发送到服务器,服务器决定当前播放播放哪一个运动瞬间,并把运动信息传递到周围能看见甲的其他玩家处.
这种情况下,3d身体运动有很多数据,难道要发送全身骨骼的矩阵过去(或者发送动作的ID和插值的位置).
办法2,玩家客户端自己响应输入,不必等待服务器许可,立即将动作进行,同时发送当前运动ID和插值信息到服务器,服务器将这个信息传递到其他玩家.
这种情况,服务器好像失去了控制权,变成仅仅是转发了.


第二个问题是 某物体或玩家的武器发出子弹射击玩家甲,到底如何实现.
办法1 服务器将子弹每个瞬间的运动位置告知玩家和周围的玩家.
因为网络延迟,再加上子弹的高速运动,那会不会看起来很卡?
办法2 服务器只发送一个向某方向发射某类型子弹的命令,各个玩家客户端自动上演这个动作.
这个办法接着出现一个问题,某种情况下,甲看起来,子弹射中自己,但同时另一个玩家乙看起来没有射中,而是偏了,这个时候,谁是准确的?


第三个问题,类似于上个问题,服务器要运行所有类似于"玩家在何处,击中了谁"这个逻辑么?还是这个逻辑也由客户端进行??

现在脑袋一团乱麻,求大家给解决下.
或者谁能说下,服务器和客户端到底干些什么?到底干些什么啊?

------解决方案--------------------
应该不用传那么多数据吧
我觉得客户端只把结果传给服务器,让服务器判断,然后服务器返回判断结果
------解决方案--------------------
???????????????????????
------解决方案--------------------
LZ这个问题最好问韩国的3D休闲网游公司里的核心研发人员,国内的应该没有能做的~
------解决方案--------------------
探讨
引用:

LZ这个问题最好问韩国的3D休闲网游公司里的核心研发人员,国内的应该没有能做的~

应该不至于吧,国内也有高手啊,高手杂不出现

------解决方案--------------------
“服务器好像失去了控制权,变成仅仅是转发”肯定不行啊。

各个玩家需要感受到一个一致的游戏世界,还有客户端可能会欺骗。所以所有事件,都要经过服务器处理并作出仲裁,然后发回馈和更新给客户端。

但是,网络有延迟,等数据包一来一回之后客户端再做响应的话太慢,所以客户端可以做预测,然后这样给用户一个平滑的图形体验,根据服务器的回馈再做一些必要修正。少数情况下 预测的结果和服务器有冲突,客户端需要回滚一下重演。


- 千里孤行


------解决方案--------------------
1.只发送客户端角色的当前变动信息给服务器,即使是骨骼动画也是一系列帧有一个标识,发送标识就是了。
2.这个我觉得,在客户端可以先计算好,轨道是否击中等信息,然后传到服务器,服务器统一更新。
3.我觉得不是很重要和很繁琐的逻辑都尽量放到客户端,服务器只负责同步。
------解决方案--------------------
LZ认为LS的两位算高手吗?
------解决方案--------------------
1,这种类型的网游一般服务器不关心角色的模型。当玩家走动的时候,客户端播放走动动画,发送走动请求到服务器就可以了(walk指令,起点,终点),服务器做验证:玩家由于地形等原因是否可以这么走动(客户端当然也会做这个计算),然后由服务器将结果广播给附近的玩家。
------解决方案--------------------
2问题用你的方法2,服务器计算结果,而不管客户端看到的情况如何。这类游戏不是经常出现,自己明明看到打中敌人,而敌人没死的情况吗。
------解决方案--------------------
我也知道上面所说的,具体怎么做就真不知道了,好象大家都是这样,只听过传说不会做啊.
------解决方案--------------------
我也是想当然的~作为新手我表示毫无鸭梨
------解决方案--------------------
第一个问题 玩家甲从A点走到B点,我猜测可能有以下两种实现办法
办法1:玩家甲的键盘鼠标输入通过客户端转化为各种总运动的请求发送到服务器,服务器决定当前播放播放哪一个运动瞬间,并把运动信息传递到周围能看见甲的其他玩家处.
这种情况下,3d身体运动有很多数据,难道要发送全身骨骼的矩阵过去(或者发送动作的ID和插值的位置).

该方法不可行,需要传输的数据太多,也没有必要。
服务端只需要知道,你现在在哪里;准备去哪里;可以不可以通行;去的状态是走还是跑。至于你先抬左脚先抬右脚,服务端不需要去关心。

办法2:玩家客户端自己响应输入,不必等待服务器许可,立即将动作进行,同时发送当前运动ID和插值信息到服务器,服务器将这个信息传递到其他玩家.
这种情况,服务器好像失去了控制权,变成仅仅是转发了.

这种情况下,服务端并不是仅仅转发,他需要计算你的行走路线,还需要验证你是否可以通行。比如网络卡时玩家有时可能会穿越墙壁,但在网络通畅时又退回原点,这就是验证的作用。服务端在这个过程中,主要的工作是验证。
------解决方案--------------------
第二个问题是 某物体或玩家的武器发出子弹射击玩家甲,到底如何实现.
办法1 服务器将子弹每个瞬间的运动位置告知玩家和周围的玩家.
因为网络延迟,再加上子弹的高速运动,那会不会看起来很卡?

该方法似乎不太可行,比如:当子弹飞行的某个瞬间卡了,那么子弹是否悬在半空?类似的问题会有很多。

办法2 服务器只发送一个向某方向发射某类型子弹的命令,各个玩家客户端自动上演这个动作.
这个办法接着出现一个问题,某种情况下,甲看起来,子弹射中自己,但同时另一个玩家乙看起来没有射中,而是偏了,这个时候,谁是准确的?

不太成熟的理解是,应该为服务端计算子弹路径、开始和结束时间,先传给客户端,在客户端先进行预判断,而服务端进行实时判断,当子弹飞行过程中击中某玩家时,在进行转发消息。
并且无论在什么情况下,永远都是服务端为准,客户端只是表现效果而已。
------解决方案--------------------
问题一
玩家点击地面 -> 发送目标点给服务器 -> 服务器判断能否过去,如果能,转1;如果不能,转2->