collision_circle

collision_circle 以用户指定的半径围绕点 x1、y1 创建一个圆形区域,然后检查该区域是否与指定的对象 / 实例 / 图块地图的 任何 实例发生碰撞通过参数 "obj"。

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

Collision circle example 此处,中间的实例使用碰撞圆来检查球对象。现在,蓝色的物体 没有 具有精确的边界框,正如您所看到的,即使精灵实际上没有接触圆圈,碰撞仍然可能发生 (即使您将函数中的精确选项设置为 true),因为该精灵的边界框与碰撞圆定义的圆形区域重叠。另一方面,只有当实际精灵与定义的圆重叠时,才会考虑绿色球发生碰撞。请记住,要考虑精确碰撞,对象精灵和碰撞函数都必须将精确标记为打开。

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

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

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

 

语法:

collision_circle(x1, y1, rad, obj, prec, notme);

 

参数类型描述
x1Real要检查的圆心的x坐标。
y1Real要检查的圆心的y坐标。
radReal半径(从中心到边缘的像素距离)。
objObject Asset or Object Instance or Tile Map Element ID or Array对象、实例、图块地图 ID、所有 / 其他关键字或包含这些项目的数组
precBoolean该复选框是基于像素完美碰撞(true=slow)还是基于其边界框(一般情况下为False=fast)。
notmeBoolean是否应排除调用实例(如果相关)(true)或(false)。

 

返回:

Object Instance or Tile Map Element ID or noone

 

例子:

if (collision_circle(x, y, 20, obj_Cursor, false, true) != noone)
{
    image_index = 1;
}
else image_index = 0;

上面的代码将检查具有20像素半径的圆形是否与"obj_Cursor"发生碰撞,如果存在碰撞,则会将运行代码的对象的image_index设置为1,但如果不存在,则会将对象的image_index设置为0。