//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;
},
当前写法会导致假死一会,,