写了一个两个坐标点之间是否能到达的方法,有点问题

//src为当前坐标 cc.v2 dstindex为 目标格子,例{55,47}
SearchInHome:function (src, dstIndex) {
var self = this;
self.Reset();
self.m_src = src;
var result = false;

        //查询次数
        var find_count = 0;

        //格子周围的格子容器
        var around = new Array();

        //判定是不是在地图格子范围内
        var newI =  self.FindEmptyTitle(navGraph.pos_to_index(src.getPosition(),2 ));

// newI = FindEmptyTitle(to_iVec2(31, 60));

        //将坐标转为int值
        var srcIndex = navGraph.index_to_int(newI,2);

// srcIndex = half_title_covert_t::index_to_int(to_iVec2(31, 60));
//已查询到的格子容器
self.m_open.push(srcIndex);
//查询到的全部格子容器
self.m_allPath[srcIndex] = new ShortestPathStep();
self.m_allPath[srcIndex].index = srcIndex;

        var dd = dstIndex;

// dd = to_iVec2(32, 52);
//将目标点转为int
var dstIndexInt = navGraph.index_to_int(dd,2);

        //之前的操作的意思是 将 当前坐标点 和 目标坐标点全转换为地图块的坐标
        {

// iVec2 s = half_title_covert_t::int_to_index(srcIndex);
// iVec2 d = half_title_covert_t::int_to_index(dstIndexInt);
//
// CCLog(“research src.dst, (%d, %d), (%d, %d)”, s.x, s.y, d.x, d.y);
}

        do
        {

            ++find_count;

            var cur;
            //遍历m_open,m_open查询取一次就直接删除,即pop
            for (var i =0;i<self.m_open.length;i++){
                cur= self.m_allPath[self.m_open.pop()];
                // console.log(self.m_allPath)
                cur.atpos = at_pos_t.AP_CLOSS;
                //dstIndexint 是 目标坐标    cur.index是当前坐标
                if (dstIndexInt==cur.index)
                {
                    console.log('条件达到')
                    result = true;
                    self.m_findIndex = cur.index;
                    break;
                    return result;
                }
            }
            // var cur = self.m_allPath[self.m_open.pop()];
            // // console.log(self.m_allPath)
            // cur.atpos = at_pos_t.AP_CLOSS;




            // 取周围8个方块

            around.length=0;//开始的时候cur。index 为 scr的position
            var vecIndex = navGraph.int_to_index(cur.index,2);

            self.LookNearHome( vecIndex, around);
            for (var i = 0 ; i <around.length; ++i){
                var index = around[i];
                var intIndex = navGraph.index_to_int(index,2);
                var gScore = cur.gScore + self.CostToCur(vecIndex, index);

                if(typeof (self.m_allPath[intIndex])=='undefined'){
                    self.m_allPath[intIndex] = new ShortestPathStep();
                }
                var pNear = self.m_allPath[intIndex];

                if (at_pos_t.AP_NONE==pNear.atpos)
                {
                    //将周围的格子都进行初始化 gscore存储格子到格子的距离,hscore存储格子到目标点的距离
                    pNear.gScore = gScore;
                    pNear.hScore = self.CostToTarget(index, dd);
                    pNear.atpos = at_pos_t.AP_OPEN;
                    pNear.parent = cur.index;
                    pNear.index = intIndex;

                    self.m_open.push(intIndex);
                }
                else if (at_pos_t.AP_OPEN==pNear.atpos && gScore<pNear.gScore)
                {
                    pNear.gScore = gScore;
                    pNear.parent = cur.index;
                    self.m_open.sort(intIndex);
                }
            }

        } while ( !self.m_open.length==0);


        return result;
    },

当前写法会导致假死一会,,

你可以打印一下log
這應該是你在同一幀裡搜尋了太多次,所以會導致假死一會兒

我這邊的解決辦法是,限制搜尋的次數 ( 例如找超過100格就略過 )
或者是在同一幀裡面,不要讓太多的物件執行這個搜尋

提供你當參考

解决了,是因为小数点后导致转换出现了问题,会一直执行下去