collision_line 沿从点 x1,y1 到点 x2,y2 的直线检查是否与参数 "obj" 指定的对象或图块地图的 任何 实例发生碰撞。
此函数将返回发生碰撞的实例的唯一 id,或找到的图块地图的 图块地图元素 ID。如果未发现冲突,则返回 noone。
此检查可以是精确的,也可以是非精确的,但要启用精确碰撞,您要检查的对象或实例 必须 还为其精灵启用精确碰撞。如果不是,则默认检查基于边界框。下图说明了其工作原理:
请记住,要同时考虑精确碰撞对象精灵和碰撞函数,必须精确标记为"on"。还应注意,函数的返回值可以是任何一个实例的id,该实例被认为沿着该行发生碰撞,因此,如果三个实例与定义的行重叠,则它们的id中的任何一个都可以是函数的返回值。
除了对象和实例之外,该函数还接受:
传递数组允许您在一次调用中检查多个对象和 / 或图块地图的碰撞。
collision_line(x1, y1, x2, y2, obj, prec, notme);
参数 | 类型 | 描述 |
---|---|---|
x1 | Real | 直线起点的x坐标。 |
y1 | Real | 直线起点的y坐标。 |
x2 | Real | 直线端点的x坐标。 |
y2 | Real | 直线端点的y坐标。 |
obj | Object Asset or Object Instance or Tile Map Element ID or Array | 对象、实例、图块地图 ID、所有 / 其他关键字或包含这些项目的数组 |
prec | Boolean | 检查是基于精确碰撞(true,速度较慢)还是基于其边界框(false,速度较快)。 |
notme | Boolean | 是否应排除调用实例(如果相关)(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 的所有实例是否与自身发生碰撞,如果存在碰撞,则销毁它们。