Actionscript 3 如何使Astar寻路可以被多个敌人使用?

Actionscript 3 如何使Astar寻路可以被多个敌人使用?,actionscript-3,a-star,Actionscript 3,A Star,我从“AdvancED_ActionScript_Animation”电子书中学到了一个明星寻路: 列表项 我创建node类node.as 我制作网格类,grid.as 我上阿斯塔课,阿斯塔 还有主课,Game.as。 A-star寻路是一项工作,但只有一名玩家。 如何让它在多人游戏机中工作 扰流器 4.Game.as: 包 { 导入flash.display.Sprite; 导入flash.display.StageAlign; 导入flash.display.StageScaleMode

我从“AdvancED_ActionScript_Animation”电子书中学到了一个明星寻路:

  • 列表项
  • 我创建node类node.as
  • 我制作网格类,grid.as
  • 我上阿斯塔课,阿斯塔
  • 还有主课,Game.as。 A-star寻路是一项工作,但只有一名玩家。 如何让它在多人游戏机中工作
扰流器 4.Game.as:

包
{
导入flash.display.Sprite;
导入flash.display.StageAlign;
导入flash.display.StageScaleMode;
导入flash.events.Event;
导入flash.events.MouseEvent;
公共类游戏扩展精灵
{
私有var_单元大小:int=30;
私有变量网格:网格;
私人玩家:精灵;
私有var_指数:int;
私有变量路径:数组;
公共功能游戏()
{
stage.align=StageAlign.TOP\u左;
stage.scaleMode=StageScaleMode.NO_SCALE;
makePlayer();
makeGrid();
stage.addEventListener(MouseEvent.CLICK、onGridClick);
}
私有函数makePlayer():void
{
_player=新精灵();
_player.graphics.beginll(0x336633);
_player.graphics.drawCircle(0,0,5);
_player.graphics.endFill();
_player.x=Math.random()*100;
_player.y=Math.random()*100;
addChild(_player);
}
私有函数makeGrid():void
{
_网格=新网格(10,10);
对于(变量i:int=0;i<10;i++)
{
_grid.setWalkable(Math.floor(Math.random()*10),
Math.floor(Math.random()*10),false);
}
drawGrid();
}
私有函数drawGrid():void
{
graphics.clear();
对于(变量i:int=0;i<\u grid.numCols;i++)
{

对于(var j:int=0;j我不会再为您编写代码了。(其他任何人都可以随意这么做)

您需要做的是创建一个函数,该函数接受开始节点和结束节点,并返回路径。如下所示:

public function getPath(starNode:Point, endNode:Point):Array
{
    // get your path by utilizing the astar instance
    // return that path array

    // note that I have used Points to store the x,y location
    // you'll need to apply those values to the grid before your astar call
    // using the setStarNode and setEndNode methods of the grid instance


}
然后,您可以修改enterFrame中使用的代码,以利用包含任意玩家/敌人路径数据的数组

例如,您可以为每个实体调用一个函数,例如:

public function followPath(entity:MovieClip, pathData:Array, pathIndex:int):void
{
    // your modified code from onEnterFrame
        // replace _player variable with entity
        // replace _path variable with pathData
        // replace _index with pathIndex 
}
如果您对OOP有足够的了解,您可能希望为您的玩家/敌人实体创建一个具有pathData和pathIndex属性的类。如果您这样做,那么您可以调用一个更新方法,该方法将使用该实例的pathData和pathIndex属性更新其每帧的移动


这是你可以用来实现目标的基本方法。

你的代码太长,任何人都看不懂。请将你的问题缩小到代码中需要帮助的特定部分。哦,对不起,你能帮我编辑帖子吗?。我想游戏中的特定代码。我想让你的问题变得易懂和有说服力g是你的工作。回答是我们的工作。我编辑了它,你能理解吗?很难,我理解这一点,但我不知道如何编码。我只是从OOP开始如果你不理解,我鼓励你退一步,学习OOP。AS3有很多书和资源可以教你。没有这些知识,这可能是n这不是你应该做的任务。你可以通过我个人资料上的电子邮件给我发电子邮件,我可以帮你解决一些问题,但这真的不是那种地方。真的……上帝保佑你
public function followPath(entity:MovieClip, pathData:Array, pathIndex:int):void
{
    // your modified code from onEnterFrame
        // replace _player variable with entity
        // replace _path variable with pathData
        // replace _index with pathIndex 
}