第一种情况为两个精灵能通过一条直线连接,如下图
代码如下:
var self = this; //用self变量来保存当下的这个this,以免在其他函数域中this指向不同对象而调用错误
//直线连接的两个对象
function isDirectLink(_begin,_end){
//若传入的是同一对象,连线的长度为0,返回false row col 分别表示精灵的行号和列号
if(_begin.row == _end.row&&_begin.col==_end.col){
m_line.length = 0;
return false;
}
//行号相等时
if(_begin.row == _end.row){
var steps = _begin.col - _end.col;
var direction = steps/Math.abs(steps);
var row = _begin.row;
//判断两个对象直线距离上是否存在精灵
for(var i = 1;i<Math.abs(steps);++i)
{
var col = _begin.col - i*direction;
//获取连线中间的精灵
var sprite = self.m_sprites[row*m_col+col];
//若不为空,连线的长度为0,返回false
if(sprite!=null)
{
m_line.length = 0;
return false;
}
}
m_line.push(new M_Segment(_begin,_end));
return true;
}
//列号相等时
if(_begin.col == _end.col){
var steps = _begin.row-_end.row;
var direction = steps/Math.abs(steps);
var col = _begin.col;
for(var i =1;i<Math.abs(steps);++i){
var row =_begin.row - i*direction;
var sprite = self.m_sprites[row*m_col+col];
if(sprite!=null){
m_line.length = 0;
return false;
}
}
m_line.push(new M_Segment(_begin,_end));
return true;
}
return false;
};
第二种情况为只需一个转角就能连接两个精灵 如下图
function isOneCornerLink(_begin,_end){
if(_begin.row == _end.row&&_begin.col == _end.col){
m_line.length = 0;
return false;
}
//第一种拐点 M_Point()是自定义的一个函数
var point_1 = new M_Point(_begin.row,_end.col);
//用拐点分别连接两个精灵
var islink_1 =(isDirectLink(_begin,point_1)&a