游戏开发论坛

 找回密码
 立即注册
搜索
楼主: square.jerry

每一个客户端如何知道服务器上的怪物和NPC的信息

[复制链接]

1

主题

27

帖子

27

积分

注册会员

Rank: 2

积分
27
发表于 2004-9-15 12:44:00 | 显示全部楼层

Re: Re:每一个客户端如何知道服务器上的怪物和NPC的信息

谜の名侦探: Re:每一个客户端如何知道服务器上的怪物和NPC的信息

正如观察世界一样
当我们睁开眼睛,就等于说进入场景,然后,世界就不断的塞给我们东西,知道闭上眼睛.


呵呵,你仔细回顾一下,你是不是把马路上视野中的每个人都看见了
魔术师所做的动作全在你的视野中,但是你并没有全看见,办公室里你视而不见的东西也有很多
记住一句名言,我们理解的,只是我们愿意理解的东西
其实我们看到的,也只是我们愿意“看”到的东西
世界中存在的东西我们必须“看”到,这是目前游戏,乃至计算机AI的结症,这需要解决,正在解决

1

主题

69

帖子

69

积分

注册会员

Rank: 2

积分
69
发表于 2004-9-17 13:45:00 | 显示全部楼层

Re: Re:每一个客户端如何知道服务器上的怪物和NPC的信息

eastland: Re:每一个客户端如何知道服务器上的怪物和NPC的信息

游戏设计的很多思想来源于生活,楼主应该先到生活中看看你是怎样观察世界的,然后就会明白服务器并不会主动...


我个人认为你这样设计的话,服务器开销太大了,因为你是用
request-reply方式来做,这存在很多问题。首先是性能问题,由客户端来触发的方式要比"服务器主动塞"方式要慢得多,因为你多了一次request,服务器对每一个玩家都要去处理这些request,显然比"服务器主动塞"方式多了一倍的数据量,服务器处理上也多了一倍以上的专门针对request的判断处理和响应工作.另外,要是每次让客户端来请求的话,也容易有拒绝服务的bug, 比如很容易做一个攻击程序,每秒发N多个request包,让你的服务器down
所以我觉得还是服务器主动发消息的方式好些,这样可以减少很多request包,而且发送的时候也不是向每个玩家发所有的NPC状态包,而是针对玩家所在的小区域来发送该小区域内的怪物状态信息包。
另外,也并不是完全像你说的“玩家以自己的行为触发了场景的需求”
因为网络游戏中玩家即使一动不动,你也肯定会发现,周围有怪物或者玩家跑进你的视野,所以靠玩家的行为来触发场景数据包的发送也不现实.

1

主题

27

帖子

27

积分

注册会员

Rank: 2

积分
27
发表于 2004-9-17 17:29:00 | 显示全部楼层

Re:每一个客户端如何知道服务器上的怪物和NPC的信息

我的意思你没有完全明白
1、我们可以把服务器端的仿真看作是一个数据库,这里的一切都是已知的、静态的,每个对象都可以定义一个状态,客户端要绘制场景时,就从服务器仿真这个数据库中去取需要的对象。
2、NPC的AI部分也可以看作是一个客户端,只不过是个自动运行的客户端,当它需要对NPC的状态作出改变时,就对服务器仿真部分发出个请求
3、这时你的问题就来了,如果NPC发生变化,是不是要给所有的客户端塞个包过去。我的建议是不要塞,除非这个NPC对指定的客户端作出行为,或者某个客户端对指定的NPC作出行为。客户端仿真的作用就是让玩家一直以为自己是在和世界交互,其实玩家在对世界作出真正的改变之前,他只是在本地仿真,他只向服务器发送改变自己状态的包。

不过这种做法,如何让客户端仿真和服务器端仿真无缝连接是需要一定技术的。比如服务器端只管MOB的数量和战斗状态,不强行给出其座标,玩家在客户端可以看到几个MOB在附近游走,如果攻击了其中一个,服务器端就获得一个发生战斗地点的座标,把服务器端仿真中的某一个MOB瞬移到该座标,这样就实现了无缝连接,而且玩家只在移动自己和攻击MOB时才对服务器发送了请求,而服务器也无需时刻给所有的客户端发出所有MOB的座标。
这样做的现实原理很简单,在你对一个NPC做action之前,NPC具体在什么位置是没有意义的。在服务器仿真中,让NPC走来走去也是没什么意义的。当然,你的行为影响到其它玩家时这就需要其它办法来协调,比如你在攻击的是一个特定的Named,而不是以数量计算的MOB。但是这也只是算法问题。
注:这仅限于MMOG类的游戏,如果你做的是动作类游戏,NPC的行为对玩家时刻有影响,那就另当别论。不过动作类的联机游戏本来对带宽要求就很高,一般也不会几十人一起在线。

25

主题

304

帖子

311

积分

中级会员

Rank: 3Rank: 3

积分
311
发表于 2004-9-17 20:04:00 | 显示全部楼层

Re:每一个客户端如何知道服务器上的怪物和NPC的信息

其实,你这样只是理解了视觉.
但是,你看不见的东西,你是会听到的.
游戏不是只有视觉感受
还是有听觉感受的.
你不能因为你看不见某个东西,
就不接受这个东西.

另外,关于那个仿真的理论.
1是作外挂很方便,
2是没有考虑旁观者
MMOG是多人在线的,如果只管自己,当然没什么.但是你的动作需要让别人看到的.

25

主题

304

帖子

311

积分

中级会员

Rank: 3Rank: 3

积分
311
发表于 2004-9-17 20:07:00 | 显示全部楼层

Re:每一个客户端如何知道服务器上的怪物和NPC的信息

而且,这种游戏也不是一个状态要给所有客户端发送数据的.

一般都是对玩家的存在空间进行分区.然后对分区内的状态,进行分区更新.

1

主题

27

帖子

27

积分

注册会员

Rank: 2

积分
27
发表于 2004-9-17 21:30:00 | 显示全部楼层

Re: Re:每一个客户端如何知道服务器上的怪物和NPC的信息

谜の名侦探: Re:每一个客户端如何知道服务器上的怪物和NPC的信息

其实,你这样只是理解了视觉.
但是,你看不见的东西,你是会听到的.
游戏不是只有视觉感受
还是有听觉感受的...


我只是举实例来说明一个小现象,我判断一个NPC是否和客户互动当然不会仅考虑视觉
事实上,NPC在和玩家发生互动之前,服务器端的状态和客户端的状态是否一致并不重要

再举个例子,走在马路上或者坐在快餐店里,听到了很多声音,可以说是“浸泡”在声音里的,但事实上你什么内容也没听到。
直到路人甲跑过来问:“你好,请问现在几点?”
这时,这个人、这句话才是有意义的。在这之前,路人甲站在什么位置,在做什么对你而言都是没有意义的。

或许你会觉得可笑,但实际上,这个路人甲即便是悄无声息的通过意念传送到你身边,用魔法把原先站在你身边的人变成苍蝇,自己变成了原先站在你身边的人……你在听到这个问题时,也会不很诧异。因为路人甲提问之前的发生事你不知道,而且永远不会知道

我知道自己的行为对他人产生引响时,必须采取同步。只在受影响时发出请求要比定时发送状态流量要小,这是一个被包含的集合。

25

主题

304

帖子

311

积分

中级会员

Rank: 3Rank: 3

积分
311
发表于 2004-9-17 22:05:00 | 显示全部楼层

Re:每一个客户端如何知道服务器上的怪物和NPC的信息

我只是觉得你的逻辑有点混乱.现在我说也没用的.实际做了你就知道了.
也许我们的表达上存在问题.都没有理解对方的意思...希望是这样.

25

主题

304

帖子

311

积分

中级会员

Rank: 3Rank: 3

积分
311
发表于 2004-9-17 22:24:00 | 显示全部楼层

Re: 每一个客户端如何知道服务器上的怪物和NPC的信息

在目前流行的多人在线RPG中
关于楼主的问题,我提供一种方法,这个在我们的游戏里面工作的很好
游戏相关介绍和下载在 http://www.hitt.com.cn

一个游戏地图被划分成如图的小区域.每个区域的划分粒度可以按照需要调整

1- 中间的黄色格子看作状态变化NPC所在的区域的时候
它会把状态变化的数据通知自己所在区域和周围8个区域的所有客户端,同样的,每个客户端的状态变化也是按照这种9个区域来通知.
2- 中间的黄色格子看作是客户端所在区域的时候.
周围9个格子内的所有有状态变化的实体都会把变化数据传递给在中间区域的客户端.所以,中间的客户端可以知道任意时候,周围的可变状态实体的当前状态和位置.

按照这个做法.
一个客户端就可以正确的画出周围的NPC/玩家/怪物/可变化建筑物等等.

采用这个做法的原因是,
1- 客户端是3D 第三人称表现.
2- 出于平衡性和安全性考虑
3- 客户端需要进行3D声效定位

原来也想过视锥挑选.但是,考虑到摄象机不断变化,最后废除.

25

主题

304

帖子

311

积分

中级会员

Rank: 3Rank: 3

积分
311
发表于 2004-9-17 22:25:00 | 显示全部楼层

Re: 每一个客户端如何知道服务器上的怪物和NPC的信息

sf_2004917222529.jpg

13

主题

161

帖子

161

积分

注册会员

Rank: 2

积分
161
发表于 2004-9-18 18:02:00 | 显示全部楼层

Re:每一个客户端如何知道服务器上的怪物和NPC的信息

谜の名侦探,http://www.hitt.com.cn上的游戏是真3D还是假3D,客户端怎么那么大。如果不能调整视角,这样的3D和2D又有什么区别?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-22 19:41

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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