collision_circle_list

此函数与 collision_circle() 函数相同,只不过不是一次只检测一个实例 / 图块地图发生碰撞,而是检测多个实例或图块地图。您提供要检查的圆形区域中心的 x/y 位置以及要检查的半径和对象 / 图块地图,并且您可以将检查设置为精确 (在这种情况下,所有正在检查的实例都需要具有 精确的 碰撞掩码) 以及检查是否应包括调用实例。

您还提供了一个 DS 列表 ,因此与调用实例发生冲突的任何实例 (或图块地图) 的 id 值都将添加到给定列表的末尾。您可以在调用此函数之前 清除 该列表,以便它仅包含此函数调用的结果。您还可以选择根据实例从圆形区域原点到其原点的距离来对实例进行排序。该函数返回找到的实例 / 图块地图的数量,如果没有找到则返回 0。

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

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

 

语法:

collision_circle_list(x1, y1, rad, obj, prec, notme, list, ordered);

参数类型描述
x1Real要检查的圆心的x坐标。
y1Real要检查的圆心的y坐标。
radReal半径(从中心到边缘的像素距离)。
objObject Asset or Object Instance or Tile Map Element ID or Array对象、实例、图块地图 ID、所有 / 其他关键字或包含这些项目的数组
precBoolean检查是基于精确碰撞(true,速度较慢)还是基于其边界框(false,速度较快)。
notmeBoolean是否应排除调用实例(如果相关)(true)或(false)。
listDS List用于存储碰撞实例ID的D列表。
orderedBoolean列表是否应按距离(true)或不按距离(false)排序。

 

返回:

Real (The number of instances / tile maps found to be in collision)

 

例子:

var _list = ds_list_create();
var _num = collision_circle_list(x, y, 100, obj_Enemy, false, true, _list, false);
if (_num > 0)
{
    for (var i = 0; i < _num; ++i;)
    {
        instance_destroy(_list[| i]);
    }
}
ds_list_destroy(_list);

上面的代码将检查调用实例位置周围具有100像素半径的圆形区域是否与"obj_Enemy"实例发生碰撞。如果存在任何碰撞,则会循环显示预先创建的列表,并销毁碰撞中的每个实例。