collision_line

collision_line 沿从点 x1,y1 到点 x2,y2 的直线检查是否与参数 "obj" 指定的对象或图块地图的 任何 实例发生碰撞。

此函数将返回发生碰撞的实例的唯一 id,或找到的图块地图的 图块地图元素 ID。如果未发现冲突,则返回 noone

此检查可以是精确的,也可以是非精确的,但要启用精确碰撞,您要检查的对象或实例 必须 还为其精灵启用精确碰撞。如果不是,则默认检查基于边界框。下图说明了其工作原理:

Collision line example请记住,要同时考虑精确碰撞对象精灵和碰撞函数,必须精确标记为"on"。还应注意,函数的返回值可以是任何一个实例的id,该实例被认为沿着该行发生碰撞,因此,如果三个实例与定义的行重叠,则它们的id中的任何一个都可以是函数的返回值。

除了对象和实例之外,该函数还接受:

传递数组允许您在一次调用中检查多个对象和 / 或图块地图的碰撞。

 

语法:

collision_line(x1, y1, x2, y2, obj, prec, notme);

参数类型描述
x1Real直线起点的x坐标。
y1Real直线起点的y坐标。
x2Real直线端点的x坐标。
y2Real直线端点的y坐标。
objObject Asset or Object Instance or Tile Map Element ID or Array对象、实例、图块地图 ID、所有 / 其他关键字或包含这些项目的数组
precBoolean检查是基于精确碰撞(true,速度较慢)还是基于其边界框(false,速度较快)。
notmeBoolean是否应排除调用实例(如果相关)(true)或(false)。

 

返回:

Object Instance or Tile Map Element ID or noone

 

例子:

with (obj_Enemy)
{
    if (collision_line(100, 400, 100, 600, id, false, false) != noone) instance_destroy();
}

此代码获取 "obj_enemy" 的所有实例,以检查从 100x,400y 到 100x,600y 的所有实例是否与自身发生碰撞,如果存在碰撞,则销毁它们。