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); }
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)); }