浅谈游戏服务器开发-地图描述

来源:互联网 发布:安溪人很多做网络赌盘 编辑:程序博客网 时间:2024/05/21 10:54

                                                         从神话故事说起

  很久很久以前,天和地还没有分开,宇宙混沌一片。有个叫盘古的巨人,在这混沌之中,一直睡了十万八千年。有一天,盘古突然醒了。他见周围一片漆黑,就抡起大斧头,朝眼前的黑暗猛劈过去。只听一声巨响,混沌一片的东西渐渐分开了。轻而清的东西,缓缓上升,变成了天;重而浊的东西,慢慢下降,变成了地。

                                                         最最最简单的地图

  神话故事中,我们的天地是盘古抡斧子抡出来的。当然我们码农也能抄起键盘,撸出一个游戏地图来的。

  最最最简单的地图:  宽:0<x<n(地图图片像素) 、长:0<y<m(地图图片像素)  

                                                          地貌与阻挡  

  最最最简单的地图有点像我们地球的经纬度,但是除了能描述,地图的范围,以及所在的位置,其他的并没什么懒用。这个代入感差了那么一点。显然不是我们想要的效果。那么我们稍微认真点描述一个地图,地图上是有地貌的。所谓的地貌就是得有山,有水,有围墙,有大门等等这些阻挡你前进步伐,迫使你绕着弯路,但是却能让你觉得乐在其中的设定。我们暂时把这些统称阻挡。

                                                           格子

  既然要描述阻挡,那么我们的最最最简单的地图开始变形了:bool map[n][m];

  假如true是没有阻挡可通行。false是有阻挡不可通行。这样描述一个地图是没问题。但有那么点不科学,因为现实生活中,不存在一个孤立的点是阻挡。我们以点作为阻挡描述,就貌似太细了点。既然太细腻了,那就再粗狂点。既然不以点,那我就以方格咯。那么我们把地图切豆腐一样,按照一定的长 宽,切成很多个方格。bool map[n/格子宽][m/格子长]。这样我们一张地图的地貌描述就完成了。判断一个坐标点是否为阻挡的的公式:bool map[x/格子宽][y/格子长]。格子的宽和高如果都为1个像素那么就和变形之后的一样了,但是我们一般都不会这么去描述,除了之前说的不科学还和后续的A*寻路相关。

                                                             九宫格

  欲知宫格须知九宫格,欲知九宫格须知九宫格同步。我们的地图可以宽广无边,但是我们的屏幕确是有限的大小。我们看不到屏幕之外的地图上的打打杀杀,恩怨情仇。既然不需要知道,也看不到,那我们就不做同步。那么我们把长 宽各n个格子的区域划为一个宫格。一个宫格与八个方向的宫格一起,称为九宫格。原则上九宫格必须要比屏幕大一圈。注意:玩家所处的宫格永远为九宫格中心的宫格。模拟一下九宫格同步就能知道九宫格同步的好处,如果玩家跨宫格的方式为横或者竖相邻的,那么我们根据玩家的宫格永远为九宫格中心的宫格定律,把看不到的三个宫格去掉,加入新的三个宫格,如果是斜入式,那么去掉看不到的五个宫格,加入新的五个宫格。当然如果是传送到某个地方,那么很有可能九个宫格都需要重新同步。所以宫格的划分主要是为了同步策略。


0 0
原创粉丝点击