游戏开发论坛

 找回密码
 立即注册
搜索
楼主: tarkey

事隔一年,再谈网络游戏同步。

[复制链接]

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2004-8-2 11:26:00 | 显示全部楼层

Re:事隔一年,再谈网络游戏同步。

UP,同意SEABUG

9

主题

121

帖子

121

积分

注册会员

Rank: 2

积分
121
QQ
发表于 2004-8-2 16:15:00 | 显示全部楼层

Re:事隔一年,再谈网络游戏同步。

Sea_bug可能没仔细看tarkey的意思,不过对于星际的论述,应该没错。
在MMOG里使用等待或者估计服务器收到移动指令的时候不需要把所有人都暂停的,只是对于这一单一用户而言会有指令传送的延迟(服务器不会暂停)。现在要讨论的是有什么好的办法减小这个延迟(估算或者其他)或者避免让客户端感觉到卡,而尽量减小碰撞检测(如火球)的误差。
奇迹MU是边发送指令给服务器边移动客户端,然后再根据最新的指令纠正上次的误差,所以感觉不到卡。
也就是说,MU为了解决客户端有卡机感觉的问题,使得碰撞检测的误差更大(我们现在就是讨论一下有什么更好的方法解决这两个问题)

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20547
发表于 2004-8-2 16:32:00 | 显示全部楼层

Re:事隔一年,再谈网络游戏同步。

这个同步问题是一直在困扰着网游,走到最后都存在一个取舍问题,很希望能听听更多朋友对同步的想法,一起来寻求攻克这个难题。

to rankey
恩,我没仔细看楼主的帖子,这个模拟客户端的操作平滑,这个在暗黑里面也有体现,不过会产生比较大的误差,也就是说,越不平滑,可能同步就越好,呵呵,不好办啊。

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
 楼主| 发表于 2004-8-2 17:06:00 | 显示全部楼层

Re:事隔一年,再谈网络游戏同步。

呵呵,其实具体的原理,我想我在我的

http://www.gameres.com/Articles/Program/Abstract/DeadReckoning.htm

这篇文章中已经说得比较明白了,这次提出来的,只是一个用来实现
的结构。斑竹提出来的问题,在我那篇文章中就有讲到,每个用户数
据结构中,都保存有自己的延迟的值,如果值太大的话,则做预测拉
扯同步,如果值不大的话,则可以适当延迟。

而实际上呢,我在这篇帖子中,之所以要提出星际,是因为不管ping
值大或者小,实际上都可以适当的延迟一小会,来减少部分误差,其
实用不着完全延迟到直到服务器有响应为止,这个值是可调的。

对于没收到服务器验证就开始运动的物体,之后和服务器返回的数据
有误差的话,其实我在另外一篇WORD文档中有比较详细的介绍,因
为其中有一些图,这里不太好上传。其核心思想还是dead reckoning,
就是用近似模拟+拽来实现,而且拽的时候的话,还有不同的方法。

有兴趣讨论的朋友,可以联系我。

1

主题

69

帖子

69

积分

注册会员

Rank: 2

积分
69
发表于 2004-8-2 20:06:00 | 显示全部楼层

Re:事隔一年,再谈网络游戏同步。

传奇就是使用同步更新技术,角色每前进一步或者发一次魔法都要把数据告诉服务器,并且等待服务器回传,如果网速慢的话,这个等待时间就很吓人了,表现为角色卡在那儿了。我认为传奇这个设计非常失败。
奇迹就不同了,它不是采用同步更新,它采用的是异步更新技术,说通俗点就像拦截导弹,它发射后是不会去死等雷达站传回的定位信息的,如果雷达站传回的信息及时,那么它就会不停地修正自己的飞行姿态,如果雷达站的传回的信息被干扰,那么大不了导弹定位信息不准确罢了,它不会陷入等待状态,而是继续飞(拦截导弹不可能在无线通信断掉的时候就停转发动机吧?!),只是打不中目标罢了,整个飞行过程是连贯的。
所以在奇迹里就是类似这个原理,那怕是服务器时断时续的情况下,玩家也不会有卡死的感觉,因为照样能走路,只不过有可能出现这样的情况,当网很卡时,如果你与怪离得很远,怪照样能打到你,呵呵,这就是异步更新带来的不准确性,当然,在网卡的情况下异步更新技术都能让玩家觉得不是很卡就肯定要付出这样的代价的。世界上哪儿有十全十美的呢。
而传奇采用的同步更新就会让你感觉怪打得准一点,但是非常卡,呵呵,就是这个道理,选择了准确,就不能解决卡机的问题。
我自己的看法是在做广域网的游戏,网络廷时和网络质量不好是客观存在的,因此不可能再像传奇那种游戏完全采用同步更新技术,合理方案的应该是主要采用异步更新,适当采用一些同步技术。
对于局域网竞技类游戏,由于要求很高的公平性,而且不存网络时断时续和长时间廷迟这些问题,当然就可以准确性放在第一位,这种情况下才主要选择同步更新技术,至于程序上怎么实现,那就太多了,都是具体实现的问题,效果大至都差不多

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
 楼主| 发表于 2004-8-2 21:22:00 | 显示全部楼层

Re: Re:事隔一年,再谈网络游戏同步。

linur: Re:事隔一年,再谈网络游戏同步。

所以在奇迹里就是类似这个原理,那怕是服务器时断时续的情况下,玩家也不会有卡死的感觉,因为照样能走路,只不过有可能出现这样的情况,当网很卡时,如果你与怪离得很远,怪照样能打到你,呵呵,这就是异步更新带来的不准确性,当然,在网卡的情况下异步更新技术都能让玩家觉得不是很卡就肯定要付出这样的代价的。世界上哪儿有十全十美的呢。


楼上说得不太准确,这种现象并不是必然的,MU里面玩家离开了,怪物还能打到人,只是因为MU选用的同步方法不对,并不是像你所说的导弹跟踪那样,MU选用同步的最小单位是鼠标点击,也就是说,是坐标,而不是速度和方向等变量。也就是说,MU的模拟就好象火车一样,是一站一站的,玩家鼠标点一下,然后行走到那个点,这个时候服务器上的怪物对周围环境的判断也将是以那个点为基准。

而我所说的dead reckoning的话,则和你说的导弹的情况很相似,只要提供了速度和方向,将不停的运动下去,而客户端发来的,只是对速度和方向的修正,而不是终点坐标信息,不需要知道终点在什么地方,只需要知道该在什么地方停下来,这样能保证在运动过程中,和客户端的时间基本一致,因为在刚刚开始运动的时候,有一个校对时间的机制,通过这个校对时间之后,不过多大的网络延迟,模拟出来的运动应该都是一样的。。

20

主题

100

帖子

112

积分

注册会员

Rank: 2

积分
112
发表于 2004-8-2 21:27:00 | 显示全部楼层

Re:事隔一年,再谈网络游戏同步。

《游戏编程精粹3》谈到了网络游戏同步的问题,星际应该就是那里面所说的 “帧同步”那种吧.
象Sea_bug说的那样.

1

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2004-8-3 01:06:00 | 显示全部楼层

Re:事隔一年,再谈网络游戏同步。

如果由于客户端的FPS过低造成的不同步该怎么解决呢?

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
 楼主| 发表于 2004-8-3 06:30:00 | 显示全部楼层

Re:事隔一年,再谈网络游戏同步。

=) 按时间算,不按帧算。。

9

主题

121

帖子

121

积分

注册会员

Rank: 2

积分
121
QQ
发表于 2004-8-3 14:39:00 | 显示全部楼层

Re:事隔一年,再谈网络游戏同步。

我想先让客户端稍微停顿一下,当然要控制在感觉不出来的范围内尽量利用能够利用的延迟,再用上预测拉扯,根据延迟计算一个移动速度把人物的误差距离移动过去。。。。。考虑中
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-8-17 08:59

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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