游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3191|回复: 6

请教:网游中,走路动作如何实时传输,才能兼顾网络开

[复制链接]

16

主题

43

帖子

43

积分

注册会员

Rank: 2

积分
43
发表于 2010-2-10 10:20:00 | 显示全部楼层 |阅读模式
问题如题目,我这样想对吗:
1、键盘事件+网络传输,即每按一个方向键,就把这个键的代码通过服务器发送给当前场景中每个玩家,在玩家的电脑中按这个方向画相应人物的走路方向。可是,问题是键一按下,我就要不停发送这个键的代码,同时带来的网络开销一定很大。
2、不断发送该玩家的位置信息,而且要以一个短时间为间隔,应该是30毫秒。其他玩家收到这个位置信息后,画出玩家。可是,问题是可能在画这个玩家时,会不连贯。

请问大侠们正解应该是怎样的?

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2010-2-11 00:17:00 | 显示全部楼层

Re:请教:网游中,走路动作如何实时传输,才能兼顾网络

不需要传递位置,那完全是浪费资源.比如人物原地不动你就无需网络通信。
那...传递位置的变化量(速度)吗?---- 也不需要!也是浪费!比如人物匀速运动你也无需网络通信。

传递速度的差分(也就是速度的变化量)就行了. (按多次键或鼠标并不会改变速度)
(当它为0即速度不变的时候就无需传递)
然后,在客户端和服务器端分别做积分以获得速度和位置(但是积分会出现误差累加,等会再说)。

分析如下:

server: // n代表帧
v(n+1) = v(n) + Δv(n) // Δv(n) 从客户端传来
s(n+1) = s(n) + v(n) * dt(n)  // dt(n)代表第n帧和第n-1帧的时间差
Δv(n) 从客户端接收而来  

client:
v'(n'+1) = v'(n') + Δv'(n')
s'(n'+1) = s'(n') + v'(n') * dt'(n')
当Δv'(n')不为零的时候向服务器发送它

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2010-2-11 00:49:00 | 显示全部楼层

Re:请教:网游中,走路动作如何实时传输,才能兼顾网络

像上面那样编程,的确可以令网络开销非常小,并且人物移动非常细腻,但是会出现误差累加。

所以需要隔一段时间进行一下坐标校正,比如半分钟校正一次。

最弱质的校正方法是,服务器发送坐标给客户端,然后客户端直接修改坐标:

server:
每隔半分钟发送 s_fix(n) = s(n)

client:
当s_fix'(n')不为零的时候:
s' (n'+1) = s_fix'(n')  
s_fix'(n')从服务器接受而来

这样一个问题是,某一时刻 t 下,如果 s'(n'(t)) 和 s(n(t)) 相差太大,
那么,突然修正s'(n'(t))会导致“不顺”。

解决方法是渐渐地修正,而不是突然一下子修正(我看diablo2联网时候就经常这样)。
当然最好是减小修正的间隔。

16

主题

43

帖子

43

积分

注册会员

Rank: 2

积分
43
 楼主| 发表于 2010-2-11 10:03:00 | 显示全部楼层

Re:请教:网游中,走路动作如何实时传输,才能兼顾网络

太感谢了,应该是这样

5

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2010-2-11 17:29:00 | 显示全部楼层

Re:请教:网游中,走路动作如何实时传输,才能兼顾网络

如果是说键盘控制移动的情况下,能不能这样:
按下(比如说W键),人物开始移动(走或跑),这时候给服务器发送一个"玩家开始从坐标A向某方向走/跑".
由服务器给附近玩家广播.
期间W一直按住不去响应它.
直到"W松开(也就是停止)","转向","障碍","变走为跑/变跑为走","其他事件"的时候再给服务器发送对应的动作.

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2010-2-11 19:19:00 | 显示全部楼层

Re:请教:网游中,走路动作如何实时传输,才能兼顾网络

LS和我说的前半部分一样啊。
而且,你的那个方法,会存在误差累加的。

5

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2010-2-11 20:34:00 | 显示全部楼层

Re:请教:网游中,走路动作如何实时传输,才能兼顾网络

E..我其实是回给自己看的..加深理解.
因为阁下说的传递差分.我水平差,看得不是很明白.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-14 12:50

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表