在游戏的世界里,玩家在地图上的某点,是否能够走动,是否遇到障碍,是否是走到了阴影处,是否水层等等先关信息都要我们前后端知道。
那么服务器是如何进行实现的呢。下面主要给大家讲讲。
首先,我们知道图片是以像素为主要为单位进行计量,但是我们后端又不能使用这个东西,在二维的世界观里,我们是以坐标(x,y)具体的表现出其某个东西,所在的位置。因此,我们就要通过这个像素来表达出地点。
想象一下啊,当我们确定到一个坐标的时候,但我们将其慢慢变大,那个小点就开始显示长宽。因此我们也用其原理。因此,我们是以将地图划分为很多个小格子,这些小格子,其实就代表了所谓的一个点,那么这个小格子是多大呢,这里我们一不超过50的为单位,作为长和宽。
那这个小格子怎么样去表达具体的信息呢,处,每个因此,我们约定,用1个字节来表其信息,一个字节八位0000 0000,每个位具体可以表示什么含义,比如,第一位如果0表示可行走,1表示障碍。第二位0表示无遮掩,1表示遮掩。等,这里我就不一一举出。不同游戏有不同的具体表达信息。
好,那么我们划分了很多歌小格子,每一行都有相同的小格子,那么我们就知道了这个地图,长有多少个各自,高有多少个格子。
设计一个结构体,头
struct tagMapHead
{
int m_width;//地图的宽
int m_height;地图的高
short m_tileSize;//小格子的变长
};
在这里,我们用了正方形表达,其实我们可以用长方形,我还见过菱形的,各个游戏不一样 。然后,头信息主要是这些,然后,将通过地图编辑器,把每个格子根据地图的基本信息,画图。然后通过工具具体生成。
头+包体。就生成了msk文件。
当前端生成了msk后,我们后端开始对其进行数据解析了。
服务端的具体存数据是
struct TMapMask
{
int m_iSize;
int m_lWidthMasks;
int m_lHeightMasks;
int m_lMaskPixelWidth;
int m_lMaskPixelHeight;
MASK_BIT_TYPE m_pMaskData[1];
};
根据msk二进制文件,后端进行解析,因为,我们每个地图,还有个基本的信息配置表,因此,我们就根据其掩码信息,将其一些数据附加到地图的结构体里。
比如,地图最大坐标,地图大小,按照我们的规定,这个地图有哪些动态区域。(动态区域,以后回去讲解),等等数据信息,供以后我们在地图上使用。
在这里地图掩码主要讲解完毕。
以后会将,我们是如何在地图上,看到玩家的。