Exemple #1
0
        public void Init(int startGridX, int startGridY, int endGridX, int endGridY, List <string> block, bool isCalcDiagonal)
        {
            this.startGridX     = startGridX;
            this.startGridY     = startGridY;
            this.endGridX       = endGridX;
            this.endGridY       = endGridY;
            this.blockList      = block;
            this.isCalcDiagonal = isCalcDiagonal;

            closeNodeList = new CloseNodeList();
            openNodeList  = new OpenNodeList();
            resultList.Clear();

            //创建startNode
            startNode = CreateNode(startGridX, startGridY);
            //把第一个node 放入开放表
            openNodeList.AddNode(startNode);
        }
Exemple #2
0
        public void CreateNodeByDirection(DirectionRelativeParent direction, NodeInfo parentNode)
        {
            Point offset = GetOffsetValueByDirection(direction);
            int   girdX  = parentNode.gridX + offset.x;
            int   gridY  = parentNode.gridY + offset.y;

            //如果是障碍物,则不创建
            if (IsBlock(girdX, gridY))
            {
                return;
            }

            //如果已经在closelist 则不创建
            if (closeNodeList.IsAlreadyInCloseList(girdX, gridY))
            {
                return;
            }

            //创建并加入Open列表
            openNodeList.AddNode(CreateNode(girdX, gridY, parentNode));
        }