文档章节

AS3 做webGame 地图寻路实例 .

小木头的冬天
 小木头的冬天
发布于 2016/07/27 15:37
字数 1155
阅读 14
收藏 0
点赞 0
评论 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
博文 58
码字总数 26102
作品 0
长沙
高级程序员
开源3D引擎--Dgame3D

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

大鸡蛋 ⋅ 2014/04/24 ⋅ 0

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十二)制作精美的Mini地图②

前面章节中讲解的包括对象头像面板、Mini雷达地图等窗体都是位置固定的,在处理起来方式多样且简单;而RPG、SLG、休闲养成等类型的游戏中往往会大量使用到悬浮且可自由拖动的窗体,比如包裹面...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十一)制作精美的Mini地图①

Silverlight4 Bata1发布了,在无数银光FANS的期待中悄悄的诞生了。如大家所愿,MS几乎满足了所有我们之前在Silverligh3中抱怨且无法做到的一切。它是一个极具里程碑意义的版本,从功能范围上...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

地图编辑器--MarbleMap Editor

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

大鸡蛋 ⋅ 2014/01/10 ⋅ 1

开源地图编辑器 MarbleMap,支持Cocos2d-x坐标系

一、功能简述 由9秒社团开发并维护的MarbleMap是支持Cocos2d-x坐标系和as3坐标系的地图编辑器,功能完善高效。这里详细介绍一下它的使用方法! 二、 控制面板 具体功能将在之后分别介绍。 A....

大鸡蛋 ⋅ 2014/01/10 ⋅ 15

【文集】寻路算法汇总

寻路是游戏开发中非常重要的一部分,能够让人物的操作更符合玩家想要的行为 先来一个在Unity3D中实现自动寻路的文章 Unity3D 自动寻路 在Unity3D中实现以及调试A*寻路算法 Unity3D A* 寻路...

CatherinePlans ⋅ 2017/11/05 ⋅ 0

unity-AI设计理念和编程思想(三)

前两个模块大致讲了讲AI角色的感知和自主决策,决策之后呢?当然就要开始行动了。比如AI角色发现一个目标,并决定去攻击它,但它与目标之间可能还有一段距离,AI角色需要先到达目标点,这就需...

scopperil ⋅ 05/24 ⋅ 0

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(二十) 第一部分拓展小结篇

写了20节,一路向追着鬼子打一样都没停过,索性也想暂时休息一下整理整理思绪好完成后面的第二部分更为精彩的内容:诸如主位式地图移动模式、NPC & 怪物 与主角的互动、对象AI、攻击与魔法、...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

类似魔兽争霸的地编

地编构成采用类似魔兽争霸的地图拼合方式。做了约一个月左右。有点小样子了。臭美一下。 图中黄点为现有的A星寻路方式。起始点用深色纹理做了标记。 原文链接:http://blog.csdn.net/hongha...

长平狐 ⋅ 2013/03/19 ⋅ 0

类似魔兽争霸的地编

地编构成采用类似魔兽争霸的地图拼合方式。做了约一个月左右。有点小样子了。臭美一下。 图中黄点为现有的A星寻路方式。起始点用深色纹理做了标记。 原文链接:http://blog.csdn.net/hongha...

长平狐 ⋅ 2012/11/19 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

从 Confluence 5.3 及其早期版本中恢复空间

如果你需要从 Confluence 5.3 及其早期版本中的导出文件恢复到晚于 Confluence 5.3 的 Confluence 中的话。你可以使用临时的 Confluence 空间安装,然后将这个 Confluence 安装实例升级到你现...

honeymose ⋅ 今天 ⋅ 0

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 今天 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 今天 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 今天 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部