(3) 人物控制模块
人物控制模块主要负责人物在地图中的显示,并且为地图场景添加鼠标侦听以及人物控制逻辑,实现鼠标点击以后人物的方向选择,路径选择以及移动。人物控制模块是这个设计的核心模块,体现了A*寻路算法的主要功能。对应类是GameController。
(4) 地图显示模块
地图显示模块主要负责读取数据加载模块的信息,将地图对象添加进显示舞台中,对地图进行定位。 对应类是 GameView。
(5) 其他模块
登陆模块:通过PHP连接数据库,校验用户密码的合法性。
2.2.2 后台模块
(1) 数据库部分
由于数据库部分不是本次设计的重点部分,所以设计的也比较简单。数据库用于保存用户数据(用户名、密码),模拟社交平台的API接入,所以不存在注册等问题,但需要留有必要字段用于保存其他冗余数据。
(2) FMS服务器部分
A 后台连接模块
用于接受前台发来的socket请求。
B socket消息发送模块
把数据库交互完的数据通过socket方式发送给客户端,客户端把接收到的数据模拟处理演示出寻路算法和即时聊天内容。
3 设计
3.1 地图构建
3.1.1 构图原理及策略
本次设计采用的是2.5D地图渲染的方式来呈现寻路算法。2.5D的含义是以2D的技术,通过一系列的视图算法,产生3D的效果,又被称为等角投影或等距视图。如下图所示,“等角”一词的含义是指,在这种投影中,x、y、z轴之间的夹角相同,都为120度[1]。
图 3.1 等角坐标系
然而以这样的坐标系所绘制出的图形的实际宽度与高度的比为1.73:1,显然给美工方面带来了极大的不便,在像素处理上,边缘部分也会发生不规则的锯齿现象。最合适的策略是使用二等角。也就是坐标系只有2个角相等,并且使实际的宽度与高度比为2:1。
游戏地图世界中,从数据层面来说,是基于区块的。如果用大厅来表示游戏地图,那么地砖指的就是区块,每一个地砖有他自己的属性比如地砖的位置,地砖的大小,人能否走到地砖上。下图比较形象的说明了二等角以及区块。区块可以是别的美术素材,比如房屋,草地等等。为了方便起见,在下面的描述中以等角坐标系来指代二等角坐标系。
图 3.2 二等角坐标系及区块世界
数据模型说明:
Point3D类:
该类有3个公共属性:x,y,z。对应x,y,z轴上的坐标。ActionScript3.0所提供的API中Point类为屏幕坐标类,该类有2个主要属性:x轴坐标和y轴坐标。在后续的版本中,DisplayObject类中出现了z轴的坐标。但没有被加入到Point类中,因此在这里需要自己定义一个等角坐标系的点模型。
IsoObject类:
该类为地图中所有对象(区块和人物)的基类,任何出现在地图中的物体,都是这个类的对象,拥有虚拟出的等角坐标系中的x、y、z坐标。这个类有一个重要的功能:自动转换等角坐标系与屏幕坐标系的值。使用这个类时,只需要键入等角坐标系的x,y,z而不需要考虑等角坐标系相对于屏幕坐标系,即Flash播放器的实际位置,这个转换过程被封装在了这个类的内部。并且一旦有一个等角坐标发生变化,便会调用一次内部的刷新函数去将这个变化转换为在实际屏幕坐标系中的变化。
Tile类和Person类为IsoObject的子类,主要负责将载入后的图片素材在区块中进行定位。
3.1.2 屏幕坐标系与等角坐标系的转换 Flash平台上自动寻路(A)算法优化设计(6):http://www.751com.cn/jisuanji/lunwen_9650.html