检测线上最近实例

脚本说明

参数说明

参数序号 参数名 参数说明
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;
2021-04-28 15:03
Comments
Write a Comment