文档章节

AS3 做webGame 地图寻路实例 .

小木头的冬天
 小木头的冬天
发布于 2016/07/27 15:37
字数 1155
阅读 18
收藏 0
 

1. 总结目的

在地图中,通过鼠标或者由程序自动运行,让一个人物自动从地图的一点走到另一点。需要计算两点之间的最优路线,要实现这样的寻路算法。最常规和最简单的方法,使用A*算法。本篇总结不具体讲解A*算法的实现以及原理,主要告诉怎么用。后面的总结中我会陆续把A*算法进行详细分析,希望大家学习。

 

2. 开发流程

2.1. 地图加载

1)在寻路过程中,地图是被分为若干个小格子,当然,根据格子数量的不同,路线长度的不同,计算寻路的时间也就不同。

 

 

上面是有一个由20*20的地图拼起来的地图,每一个地图块是有20像素*20像素元件做成。

每一个地图块是2帧构成,地图帧是人物可以行走的路线,第二帧是障碍物(桌子)。上面的地图是路线和障碍物8比2的概率生成,参考代码:

Block 是地图块元件类。用Flash cs3 已经做好。

this.mass_x_count 是指地图X轴上板块数量

this.mass_y_count 是指地图Y轴上板块数量

distancex 是指地图X轴离边界Left的距离

distancey 是指地图Y轴离边界Top的距离

aNodeMap 是一个2维数组,记录着每一个地图块当前的状态,是障碍物还是路线。

 

地图初始化中,根据两个For循环嵌套,生成一个表格状的地图。这里我不在详细介绍,详细会AS3的一定可以看的懂。

 

2.2. 地图上移动人物加载

1)路线寻路肯定要有一个元件在地图上移动,才可以正确的显示出寻路的过程。无论是一个人物移动或多个人物移动,基本做法相同,下面我们就来加载一个人物物件到地图上来。

Waiter 是一个移动的任务元件。在这里我们叫“服务员元件”

Timer 是为服务员增加一个timer事件,主要目的是为了服务员从一个地图块移动到另一个地图块,不是跳过去的,而是慢慢的移动过去的。

此方法主要在加载完地图后调用,指定人物加载的X,Y坐标,进行加载。

 

2.3. 选择移动目的地

1)地图和服务员加载完成后,我们需要选择服务员移动的目的地,选择的方式有很多。举个例子,人人餐厅中客人进来就餐,首先进门后,程序会自动寻找有空位的X,Y坐标,然后计算路线,客人就会沿着路线走进去。同样服务员也会根据客人进来餐厅的循序,以及客人所做的座椅的坐标进行计算路线,然后走过去服务。

2)由于我们只是一个例子,所以就有我们鼠标确定目的地。

 

this.addEventListener(MouseEvent.CLICK,clickWay);

这个事件通过,用户鼠标点击地图上路线进行调用。

 

 

 

2.4. 路线寻找,人物移动

1)在地图增加完后我们增加一个A*算法实例

AStar是A*算法的一个封装类。我们需要把我们地图上路线和障碍物二维数组传递给算法。

这个是在地图加载后完成

 

2)确定移动目的地后计算路线

上面代码是在选择目的地后补充的代码

设置A*(asrar)算法的其实点和目的地。起始点和目的地封装成ANode对象给算法的。

ANode 是一个算法计算中节点的保存,记录着节点的位置X,Y,节点ID,以及使用曼哈顿方法计算F = G + H  F、G、H值的保存。从而做为路线计算中开启列表进行存储。

最后会调用DoSearch 判断路线的获取是否成功。获取的路线调用astar.aPath 方法进行获取。

启动timer 进行服务员移动操作。

 

3)服务员移动

     在移动服务之前,我们确定,我们寻找到路线,此服务员的上一个路线已经完成。

代码如下:

这个方法是在寻找到路线后,timer启动执行的。bMove 表示是否移动服务员。

player 代表当前移动中的服务员对象,他是在创建服务员的时候保存在全局变量中。

 

本文转载自:http://blog.csdn.net/smalloceanlxh/article/details/6589167

共有 人打赏支持
小木头的冬天
粉丝 12
博文 88
码字总数 37404
作品 0
长沙
架构师
私信 提问
【北京】北京荣唐科技有限公司招聘技术开发人员

一、 FLASH+AS3 游戏高级开发工程师(2人) 工作职责: 从事SNS平台上flash webgame游戏开发 职位描述: 1. 至少1年以上FLASH+AS3游戏项目开发经验 2. 对as3的事件机制有深入认识,具有良好编...

frendy
2012/04/12
586
7
开源3D引擎--Dgame3D

Dgame3D 是一个基于AS3的开源3D引擎,可以用于开发webgame产品,本项目由9秒社团 开源并维护。 效果图: http://git.oschina.net/9maio/dgame3D...

大鸡蛋
2014/04/24
2.4K
0
网游公司招聘java/flex精英

公司名:北京博为远景信息技术有限公司 联系方式:请将简历发送至zhaopin@djyou.cn并标明应聘职位及来源,谢谢合作。 网址:http://www.djyou.cn/ 工作地点:二号线朝阳门地铁站旁联合大厦 ...

boweihr
2011/05/05
753
4
北京网页游戏公司招聘java+flex工程师(地点:朝阳区)

北京博为远景信息技术有限公司招聘(www.djyou.cn) JAVA技术经理 职责:webgame的项目需求分析和任务分配,项目的进度把控,webgame的游戏核心模块开发 要求: 3年以上工作经验,jdk5,ann...

墨斗SH
2011/04/18
579
4
地图编辑器--MarbleMap Editor

MarbleMap Editor 是一款开源地图编辑器。 一、功能简述 AS3开发的RPG地图编辑器,功能丰富、高效。各位小伙伴可以在9miao.com里面下载。 二、 控制面板 具体功能将在之后分别介绍。 A. 新建...

大鸡蛋
2014/01/10
5.4K
1

没有更多内容

加载失败,请刷新页面

加载更多

新手也能看懂,消息队列其实很简单

该文已加入开源项目:JavaGuide(一份涵盖大部分Java程序员所需要掌握的核心知识的文档类项目,Star 数接近 16k)。地址:https://github.com/Snailclimb/JavaGuide. 本文内容思维导图: 消息...

阿里云官方博客
11分钟前
0
0
如何在Chrome浏览器中启动deviceready事件(尝试调试phonegap项目)?

我正在开发PhoneGap应用程序,我希望能够在Chrome中调试它,而不是在电话上调试。但是,我在onGetReady()函数中初始化我的代码,该函数在PhoneGap触发“deviceready”事件时触发。由于Chr...

kisshua
今天
9
0
nginx中部署vue打包后的静态文件

如何在nginx中部署静态资源就不描述了, 请看我的这篇博客 将vue脚手架项目打包后的静态文件放到nginx上, 发现有个问题, 即url上有#, 怎么去掉这个#呢. 1 项目中router的mode 路由的mode要为h...

克虏伯
今天
13
0
JS容易理解错误的地方

在这端代码执行的末尾,你会不会hi变量回事函数中的hi了?你会不会认为这不是按引用传递了? 对值传递和引用传递产生质疑了? 1 var hi = {};2 function sayHello(hi) { ...

器石_
今天
9
0
Java开发学习--MongoDB

之前只学过sql,第一次使用非关系型数据库。以前对于关系型数据库与非关系型数据库的概念很模糊,通过这次的学习对这两者有了一个清晰的概念。 主键 在MongoDB中,主键名叫"_id",如果在生成...

微笑向暖wx
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部