检测线上最近实例
脚本说明
参数说明
参数序号 | 参数名 | 参数说明 |
---|---|---|
argument0 | x1 | 起始点x坐标 |
argument1 | y1 | 起始点y坐标 |
argument2 | x2 | 终点x坐标 |
argument3 | y2 | 终点y坐标 |
argument4 | object | 需检测对象 |
argument5 | prec | 是否精确碰撞检测或刚体检测,使用精确检测耗费更多性能 |
argument6 | notme | 是否排除自身 |
代码正文
/// @desc 检测线上最近实例
/// @arg x1
/// @arg y1
/// @arg x2
/// @arg y2
/// @arg object
/// @arg prec
/// @arg notme
var ox,oy,dx,dy,object,prec,notme,sx,sy,inst,i,angle;
ox = argument0;
oy = argument1;
dx = argument2;
dy = argument3;
object = argument4;
prec = argument5;
notme = argument6;
sx = dx - ox;
sy = dy - oy;
angle = point_direction(ox,oy,dx,dy);
inst = collision_line(ox,oy,dx,dy,object,prec,notme);
if (inst != noone) {
while ((abs(sx) >= 1) || (abs(sy) >= 1)) {
sx /= 2;
sy /= 2;
i = collision_line(ox,oy,dx,dy,object,prec,notme);
if (i) {
dx -= sx;
dy -= sy;
inst = i;
}else{
dx += sx;
dy += sy;
}
}
while (collision_point(dx,dy,object,prec,notme) != noone)
{
dx -= lengthdir_x(1,angle);
dy -= lengthdir_y(1,angle);
}
}
// inst-碰撞实例dx/dy-碰撞位置
var array = [inst,dx,dy];
return array;
Comments