通过此函数,您可以使用运行代码的实例的碰撞掩码来检查与对象 (或图块地图) 的所有实例发生碰撞的位置。
当您使用此功能时,您实际上是要求 GameMaker 将实例移动到新位置,检查是否存在碰撞,然后返回并告诉您发现了哪些碰撞。这适用于精确碰撞,但前提是实例和正在检查的对象的实例都选择了精确碰撞蒙版,否则仅应用边界框碰撞。
除了对象和实例之外,该函数还接受:
传递数组允许您在一次调用中检查多个对象和 / 或图块地图的碰撞。
您还提供了一个 DS 列表 ,因此与调用实例发生冲突的任何实例 (或图块地图) 的 id 值都将添加到给定列表的末尾。您可以在调用此函数之前 清除 该列表,以便它仅包含此函数调用的结果。您还可以选择根据执行检查的实例原点到发现发生冲突的实例原点的距离来对列表进行排序。
该函数返回找到的实例 / 图块地图的数量,如果没有找到则返回 0。
请参阅: 碰撞
instance_place_list(x, y, obj, list, ordered);
参数 | 类型 | 描述 |
---|---|---|
x | Real | 要检查实例的X位置。 |
y | Real | 要检查实例的Y位置。 |
obj | Object Asset or Object Instance or Tile Map Element ID or Array | 对象、实例、图块地图 ID、所有 / 其他关键字或包含这些项目的数组 |
list | DS List | 用于存储冲突实例的ID的DS列表。 |
ordered | Boolean | 列表是否应按距离排序(true)或(false)。 |
Real (The number of instances / tile maps found to be in collision)
var _list = ds_list_create();
var _num = instance_place_list(x, y, obj_Enemy, _list, false);
if (_num > 0)
{
for (var i = 0; i < _num; ++i;)
{
instance_destroy(_list[| i]);
}
}
ds_list_destroy(_list);
上面的代码将检查与在调用实例位置找到的所有实例的冲突。这些将被添加到DS列表中,然后循环以销毁冲突中的每个实例。