collision_ellipse

collision_ellipse 使用前四个参数 (x1,y1,x2,y2) 定义当前房间内椭圆的宽度和高度,然后检查是否定义了 任何 对象或图块地图 "obj" 参数与该区域发生碰撞。可以检查此冲突是否精确,您还可以选择检查是否运行代码本身的实例。考虑这个图像:

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

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

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

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

 

语法:

collision_ellipse(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

 

例子:

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"的实例。