place_meeting

通过此函数,您可以使用运行代码的实例的碰撞掩码来检查与另一个实例或对象的所有实例发生碰撞的位置。当您使用此功能时,您实际上是在要求 GameMaker 将实例移动到新位置,检查是否存在碰撞,然后向后移动并告诉您是否发现碰撞。

这适用于精确碰撞,但前提是要检查的实例和对象都选择了精确碰撞蒙版。否则,仅应用边界框碰撞。

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

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

如果您需要获取碰撞对象的唯一实例 id,则应使用 instance_place()

Place meeting exampleSee: Collisions

 

语法:

place_meeting(x, y, obj);

参数类型描述
xReal要检查的x位置。
yReal要检查的y位置。
objObject Asset or Object Instance or Tile Map Element ID or Array对象、实例、图块地图 ID、所有 / 其他关键字或包含这些项目的数组

 

返回:

Boolean

 

示例1:

if (keyboard_check(vk_left))
{
    if (!place_meeting(x - 5, y, obj_wall))
    {
        x -= 5;
    }
}

以上代码检查实例左侧是否存在碰撞,如果没有碰撞,则移动实例。

示例2:

var _tilemap = layer_tilemap_get_id("Tiles_1");

if (keyboard_check(vk_left))
{
    if !place_meeting(x - 5, y, [obj_wall, obj_bush, _tilemap])
    {
        x -= 5;
    }
}

这与上一个示例的逻辑相同,但它使用数组来检查与两种类型的对象 (obj_wallobj_bush) 以及名为 "Tiles_1" 的 Tile Layer 的 Tile Map 的碰撞。

由于您只需要获取一次图块地图 ID,因此您可以将第一行移至 Create 事件。