`
hgfghw6
  • 浏览: 44691 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

ActionScript 3.0(as3)实现的A*寻路算法源代码下载

阅读更多

曾经写过A*寻路算法的教程,但没有贴出任何代码,这次代码全都贴出,大家可以进一步学习
我只是按照A*的基本思想,将A*寻路算法用AS3实现了一下,没有做太多的寻路优化等
如果你本身已经会用A*寻路算法了,那么下面的代码也不必研究了
代码中注释很多,就不贴过多的解释
看代码以前,可以先看看下面这两篇文章,或者看代码的时候配合例子和教程来看
A*(A星)寻路算法讲解
A*寻路算法,DEMO展示
在DEMO展示中,有三个版本,由于代码写了很久了,我也不记得下面贴出的代码是哪个版本的了,见谅。。
 
首先是文档类Index.as:
package code{
  
  import flash.display.Sprite;
  import flash.text.TextField;
  import flash.text.TextFormat;
  
  public class Index extends Sprite{
    
    private var road:Road;
    
    public function Index(){
      stage.align = "TL";
      stage.scaleMode = "noScale";
      stage.showDefaultContextMenu = false;
      init();
    }
    
    //初始化
    private function init():void{
      road = new Road;
      addChild(road);
      road.x = GV.ROAD_INIT_X;
      road.y = GV.ROAD_INIT_Y;
      
      //地图规格申明
      var text:TextField = new TextField;
      text.htmlText = "地图规格:50*50方格,障碍物500方格    寻路算法:A*(星)   制作:sunbright";
      addChild(text);
      text.x = 25;
      text.y = 530;
      text.width = 500;
      text.selectable = false;
      text.mouseEnabled = false;
      text.setTextFormat(new TextFormat("宋体",12,0xffffff));
      text = null;
    }
    
  }
  
}
定义参数的类:GV.as
package{
  
  public class GV{
    
    public function GV(){
      throw new Error("变量");
    }
    
    //Road创建的初始x、y坐标
    public static const ROAD_INIT_X:int = 25;
    public static const ROAD_INIT_Y:int = 25;
    
    //纵横方块参数
    public static const WIDTH_NUMBER:int = 50;
    public static const HEIGHT_NUMBER:int = 50;
    public static const WIDTH_TOTAL:int = 500;
    public static const HEIGHT_TOTAL:int = 500;
    public static const GRID_WIDTH:int = 10;
    public static const GRID_HEIGHT:int = 10;
    
    //障碍物个数
    public static const THING_NUMBER:int = 500;
    
    //state状态参数表示
    public static const HAVE_THING:int = 1;
    public static const IMPASSE_VALUE:int = 2;
    public static const MAIN_VALUE:int = 8;
    
    //路径耗费固定值
    public static const BIAS_VALUE:int = 14;
    public static const LINE_VALUE:int = 10;
    
    //文本表示
    public static const IMPASSE:String = "死路!";
    public static const RESULT_FRONT:String = "用时 ";
    public static const RESULT_BACK:String = " 毫秒";
  
  }
  
}
主要算法所存在的Road.as类
package code{
  
  import flash.display.Sprite;
  import flash.events.MouseEvent;
  import flash.text.TextField;
  import flash.text.TextFormat;
  import flash.utils.clearInterval;
  import flash.utils.getTimer;
  import flash.utils.setInterval;
  
  public class Road extends Sprite{
    
    private var lands:Sprite;
    private var things:Sprite;
    private var c:Coordinate;
    private var main:Main;
    private var click:Sprite;
    private var drawPath:Sprite;
    private var result:TextField;
    
    private var unlockList:Array;
    private var lockList:Object;
    
    private var targetIX:int;
    private var targetIY:int;
    
    private var intervalID:int = 0;
    private var startTime:int;
    private var endTime:int;
    
    public function Road(){
      init();
    }
    
    //初始化
    private function init():void{
      //创建坐标
      c = new Coordinate;
      
      //创建文本框
      result = new TextField;
      result.mouseEnabled = false;
      result.autoSize = "left";
      result.y = -20;
      result.selectable = false;
      result.defaultTextFormat = new TextFormat("宋体",12,0xffffff);
      addChild(result);
      result.text = "结果";
      
      //创建平原
      lands = new Sprite;
      lands.mouseChildren = false;
      lands.mouseEnabled = false;
      addChild(lands);
      lands.graphics.beginFill(0xff0000);
      lands.graphics.lineStyle(0);
      lands.graphics.drawRect(0,0,GV.WIDTH_TOTAL,GV.HEIGHT_TOTAL);
      
      for(var i:int = 1; i = GV.WIDTH_NUMBER || iy >= GV.HEIGHT_NUMBER){
        return null;
      }
      
      //是否有障碍物
      if(c[ix][iy].isThing){
        return null;
      }
      
      //是否已经加入关闭标记列表
      if(lockList[ix + "_" + iy]){
        return null;
      }
      
      //是否已经加入开启标记列表
      if(unlockList[ix + "_" + iy]){
        return null;
      }
      
      //判断当斜着走的时候,它的上下或者左右是否有障碍物
      if(p){
        if(c[_p.ix][iy].isThing || c[ix][_p.iy].isThing){
          return null;
        }
      }
      
      var cx:Number = Math.abs(targetIX - ix);
      var cy:Number = Math.abs(targetIY - iy);
      return new Sign(ix,iy,
              p ? GV.BIAS_VALUE : GV.LINE_VALUE,
              (cx + cy) * 10,
              _p);
    }
    
  }
  
}
标记数据记录,Sign.as类
package code{
  
  public class Sign{
    
    private var _ix:Number;
    private var _iy:Number;
    private var _p:Sign;
    private var _f:int = 0;
    private var _g:int = 0;
    private var _h:int = 0;
    //f表示路径评分、g表示当前移动耗费、h表示当前估计移动耗费
    //公式:f = g + h,表示路径评分的算法
    //ng值表示以父标记为主标记的g值
    //nh值表示当前估计移动耗费
    
    public function Sign(_ix:Number,_iy:Number,ng:int,nh:int,_p:Sign = null){
      this._ix = _ix;
      this._iy = _iy;
      this._p = _p;
      
      if(_p){
        _g = _p.g + ng;
        _h = nh;
        _f = _g + _h;
      }
    }
    
    //获取该标记的坐标
    public function getSign():Object{
      return {x:_ix * GV.GRID_WIDTH,y:_iy * GV.GRID_HEIGHT};
    }
    
    //获取它表示的x坐标
    public function get ix():int{
      return _ix;
    }
    
    //获取它表示的y坐标
    public function get iy():int{
      return _iy;
    }
    
    //获取父标记
    public function get p():Sign{
      return _p;
    }
    
    //获取路径评分
    public function get f():int{
      return _f;
    }
    
    //获取当前路径移动耗费
    public function get g():int{
      return _g;
    }
    
    //获取当前路径耗费估值
    public function get h():int{
      return _h;
    }
    
    //重写toString值
    public function toString():String{
      return ix + "," + iy;
    }
    
  }
  
}
某点状态类,State.as
package code{
  
  public class State{
    
    public var value:int = 0;
    
    public function State(){
      
    }
    
    //获取是否障碍
    public function get isThing():Boolean{
      return value == GV.HAVE_THING;
    }
    
    //获取是否死路
    public function get isWalk():Boolean{
      return value == GV.IMPASSE_VALUE;
    }
    
    //重写toString
    public function toString():String{
      return value.toString();
    }
    
  }
  
}
物体类:Thing.as
package code{
  
  import flash.display.Sprite;
  
  public class Thing extends Sprite{
    
    public function Thing(){
      init();
    }
    
    //初始化
    private function init():void{
      graphics.beginFill(0);
      graphics.drawRect(0,0,GV.GRID_WIDTH,GV.GRID_HEIGHT);
      
      mouseEnabled = false;
      mouseChildren = false;
    }
  }
  
}
坐标系类,Coordinate.as
package code{
  
  public dynamic class Coordinate extends Array{
    
    public function Coordinate(){
      init();
    }
    
    //初始化
    private function init():void{
      for(var i:int = 0; i
主角类,Main.as
package code{
  
  import flash.display.Sprite;
  
  public class Main extends Sprite{
    
    public function Main(){
      init();
    }
    
    //初始化
    private function init():void{
      graphics.beginFill(0x0000ff);
      graphics.drawRect(0,0,GV.GRID_WIDTH,GV.GRID_HEIGHT);
      
      mouseEnabled = false;
      mouseChildren = false;
    }
    
    //获取ix坐标
    public function get ix():int{
      return int(x / GV.GRID_WIDTH);
    }
    
    //获取iy坐标
    public function get iy():int{
      return int(y / GV.GRID_HEIGHT);
    }
    
  }
  
}
[url=http://www.xiaos8.com/uploads/flash/seekroad.rar]

源文件打包下载[/url]
下载源文件,直接打开move.fla运行即可
本文转自:http://www.5uflash.com/flashjiaocheng/Flash-as3-jiaocheng/4791.html
分享到:
评论

相关推荐

    as3 A*寻路源码

    在这个"as3 A*寻路源码"中,我们可以深入理解A*算法的工作原理及其在ActionScript 3(AS3)中的实现。 A*算法的核心思想是结合了Dijkstra算法的全局最优性和最佳优先搜索的效率。它通过一个评估函数f(n)来指导搜索...

    AS3.0 A星寻路工程实例(含源代码)

    在AS3.0(ActionScript 3.0)中实现A星寻路算法,可以用于Flash游戏或应用中的角色移动、物体导航等功能。 AS3.0是Adobe Flex和Flash Player的主要编程语言,它基于ECMAScript,提供了强大的面向对象特性。在AS3.0...

    as3 A* 寻路源码

    在AS3(ActionScript 3)这种面向对象的编程语言中实现A*寻路算法,可以为游戏开发、地图导航等场景提供强大的路径计算支持。 首先,我们来看A*算法的基本原理。A*算法通过评估每个节点的F值来决定搜索方向,F值由G...

    A*寻路的AS实现例子

    标题 "A*寻路的AS实现例子" 指的是使用ActionScript(一种基于ECMAScript的脚本语言,常用于Adobe Flash开发)实现A*(A-star)寻路算法的一个示例项目。A*算法是一种广泛应用在路径规划中的启发式搜索算法,尤其在...

    ActionScript3.0游戏互动编程(游戏编程源代码文件)

    10. **算法应用**:压缩包中的代码例子可能涉及到各种算法,如搜索算法(A*寻路)、图形算法(碰撞检测、渲染优化)、数据结构(队列、栈、图)等,这些都是游戏开发中的基础工具。 通过对这些知识点的深入理解和...

    FLASH AS3 A*自动寻路算法!

    这里我们关注的是基于ACTIONSCRIPT 3 (AS3)实现的A*(A-Star)寻路算法。A*算法是一种启发式搜索算法,它结合了Dijkstra算法的全局最优性和BFS(广度优先搜索)的高效性,被广泛用于游戏中的智能体寻路问题。 A*...

    flash actionscript3游戏开发之 as3斜45度可移动物品可AStar寻路算法.rar

    本压缩包提供的资源着重于AS3中如何实现这些功能,特别是A*(A-Star)寻路算法的应用。 ActionScript3是Adobe Flash平台的主要编程语言,它支持面向对象编程,提供了强大的性能和灵活性,是制作互动内容和游戏的...

    As3 A星寻路算法

    A星(A*)寻路算法是计算机图形学和游戏开发中常用的一种路径搜索算法,它用于在带有障碍物的网格环境中找到两点之间的最短...而提供的`pathFinding-src`文件可能包含了AS3实现A星算法的源代码和示例,可供学习和参考。

    塔防游戏程序(as3.0源码)

    通过深入研究这个塔防游戏的AS3.0源码,初学者不仅可以掌握基本的游戏编程概念,还能了解到面向对象编程和A*寻路算法的实际应用,对于提升编程技能和理解游戏开发流程大有裨益。同时,通过对`library.swf`和`catalog...

    A星寻路算法(A*)Flex 实现

    在提供的Flex工程文件中,你将找到源代码,包括ActionScript类和MXML界面文件,它们展示了如何在Flex环境中实现和展示A*算法。你可以通过运行和调试代码来理解每个部分的工作原理,进一步学习和改进寻路算法。

    flex简单基于A*寻路

    通过分析和运行这些文件,我们可以进一步了解如何在Flex项目中具体实现A*寻路算法。这不仅涉及到算法的理论理解,还需要对Flex框架和ActionScript编程有一定的掌握。如果你想要深入学习或实现这个项目,可以从阅读...

    as3 寻路源代码

    ActionScript是一种面向对象的编程语言,常用于开发Adobe Flash平台上的应用和游戏,因此,A星(A*)算法在AS3中的实现对于游戏开发者尤其有价值。本文将深入探讨A*算法以及在AS3中如何实现这一算法。 A*算法是一种...

    Advanced+AS3.0+Animation高级动画编程+源文件+中英文PDF.rar

    5. **算法详解**:教程中可能会详细讲解各种算法,如寻路算法(A*)、物理引擎算法、碰撞检测算法等。这些算法在游戏场景中的应用能提升游戏的趣味性和挑战性。 6. **源代码分析**:通过阅读和分析提供的源代码,...

    AS3 A星算法以及实例

    标题“AS3 A星算法以及实例”表明我们将探讨的是使用ActionScript 3(AS3)语言实现的A星算法。AS3是Adobe Flash平台的主要编程语言,常用于创建交互式网页内容、游戏和动画。 描述中提到这是一个包含源文件和源...

    as3 寻路代码,经典

    3. code:这可能是一个文件夹,包含了其他的源代码文件,与寻路算法相关的其他类或者支持文件可能就在这里。 4. move.fla:这是一个Flash的源文件,用于创建和编辑动画或交互内容。在这里,开发者可能已经设置好了...

    flex as3游戏寻路源码+详解

    Flex是一种基于开放源代码的、用于构建富互联网应用(RIA)的开发框架,而AS3是Flash平台上广泛使用的编程语言,尤其适合创建互动性和图形丰富的Web内容。 1. **地图加载**:地图是游戏的基础,地图加载涉及将地图...

    AS3 AStar优化版.rar

    AS3 AStar优化版是一个基于ActionScript 3(AS3)的A*寻路算法的改进版本。A*算法是一种广泛应用在游戏开发、路径规划、网络路由等领域中的搜索算法,它能够有效地找到两点间的最短路径,同时兼顾了效率和准确性。在...

    flex简易迷宫源代码

    路径寻找算法,如A*寻路算法,也可能在`hopper`中有所体现。A*算法结合了最佳优先搜索和启发式信息,能够快速找到从起点到终点的最短路径。在Flex中,我们可以创建一个优先级队列,结合曼哈顿距离或欧几里得距离作为...

    Flash版本在线五子棋游戏,使用PHP+AS3.0开发,代码注释比较完善.zip

    在压缩包文件名“Five-Chesses-Online-With-AS3-master”中,“master”可能表示这是项目的主分支,意味着它包含完整的源代码和资源,适合学习和进一步开发。 综上所述,这个项目为学习者提供了深入研究Flash游戏...

    PureMVC_Iso_Astar.rar

    标题中的“PureMVC_Iso_Astar.rar”指的是一个使用PureMVC框架实现的Isometric(等轴测)空间中的A*(A-star)寻路算法的项目压缩包。这个项目可能包含了源代码、演示以及相关的文档,方便开发者理解和学习。 Pure...

Global site tag (gtag.js) - Google Analytics