collision_ellipse 使用前四个参数 (x1,y1,x2,y2) 定义当前房间内椭圆的宽度和高度,然后检查是否定义了 任何 对象或图块地图 "obj" 参数与该区域发生碰撞。可以检查此冲突是否精确,您还可以选择检查是否运行代码本身的实例。考虑这个图像:
此处,中间的实例使用碰撞椭圆来检查球对象。现在,蓝色的物体 没有 具有精确的边界框,正如您所看到的,即使精灵实际上没有接触椭圆,碰撞仍然可能发生 (即使您将函数中的精确选项设置为 true),因为该精灵的边界框与碰撞圆定义的椭圆区域重叠。另一方面,只有当实际精灵与定义的椭圆重叠时,才会考虑绿球发生碰撞。请记住,要考虑精确碰撞,对象精灵和碰撞函数都必须将精确标记为打开。
此函数将返回发生碰撞的实例的唯一 id,或找到的图块地图的 图块地图元素 ID。如果未发现冲突,则返回 noone。
除了对象和实例之外,该函数还接受:
传递数组允许您在一次调用中检查多个对象和 / 或图块地图的碰撞。
collision_ellipse(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
if (collision_ellipse(50, 50, 200, 100, obj_Player, false, true) != noone)
{
instance_create_layer(obj_Player.x, obj_Player.y, "Effects", obj_Splash);
}
这将检查对象"obj_Player"在50 x、50 y和200 x、100 y范围内的椭圆区域。如果与该对象发生碰撞,则会在obj_Player的x/y坐标处创建"obj_Splash"的实例。