如果与点发生碰撞


描述

此动作用于检查房间中特定的点是否与指定物体的一个或多个实例发生碰撞,如果确有碰撞将返回true 否则将返回 false 。你需要给出需要检查的物体和需要检查的位置,此位置可以是绝对位置或与实例的相对位置。你也可以选中 反向(NOT) 标签,这样如果在给定位置 没有 没有碰撞,那么它将返回 true ,有碰撞将返回false。你也可以设置 包括自己(Exclude Self) 选项使碰撞检查的物体也包括调用的实例本身。

接下来你可以选中/不选中 返回列表的选项。选中意味着此函数将在有实例与给出的点发生碰撞时,此动作将会创建 一个列表 数据结构并放入 所有 发生碰撞的实例,并将 目标 变量设为DS列表ID。要是你不选中,如果没有碰撞发生,目标 变量将被设为小于0的数,或者所有发生碰撞的实例中一个 实例的独特ID,也就是说如果有多个实例发生碰撞,你只能知道其中一个实例的ID而不知道其它的,除非你使用了列表(将return list选中)。

如果你选择返回列表,并且目标变量没有 被设置为 临时 那么你也可以选择 释放目标 选项。当你将释放标签选项设为 true,那么每次调用此动作时,目标变量包含的列表将被清除并创建一个新列表,并将新列表返回给目标变量。这样 你就能反复使用此变量而不需要担心存储溢出。但如果你没有 选中 释放目标 选项,你可能会因为为原列表加入新实例而使原来的列表出错。注意 无论 你是否选中了释放标签标签,只要你为此动作设置了返回列表,则目标变量将始终包含列表ID,因此,当实例被摧毁或房间结束时,需要释放此列表(例如,你可以使用清理事件,以及 释放数据结构动作)。值得注意的是你可将 释放目标 选项设为使用预定义的变量或表达式,因此你可以通过预先设定好的变量(或使用具有不同结果的表达式)来控制到底何时释放目标,只要它的值为 true/false

最后,你需要提供 目标变量来存储返回值或ID列表。如果你设置的目标变量是 临时 (局部)变量,那么此动作创建的变量保存返回值到事件结束。在这种情况下,如果已选中该选项,释放目标 选项不会生效,需要你来负责销毁DS列表。如果没提供目标变量而选中了 返回列表 选项,那么将不会创建列表。

重要! 碰撞检测只对那些有碰撞遮罩的实例有效 (碰撞双方都要有)。例子:它们有一个被分配给sprite_index的精灵, 或被分配给 mask_index的精灵。如果接触双方的任何一方没有碰撞遮罩,那么将不会发生碰撞,而不管在此时绘制了什么实例。


注意如果需要添加此动作进”if"代码块,它们应该被放到动作的 一边 ,如下图所示: If 碰撞的例子


动作语法:

If Collision Point At Syntax


参数:

参数 描述
形状 需要用到的形状
物体 要检查的物体的实例
x1 开始的X坐标位置
y1 开始的Y坐标位置
x2 结束的X坐标位置
y2 结束的Y坐标位置
释放目标列表 可以被设置为一个变量或表达式或 true/false 来在重新使用列表变量控制列表存储的释放。
目标 此动作返回值的目标变量


例如:

If 碰撞的例子
上述代码检查在鼠标的X/Y位置与物体 "obj_Enemy"的碰撞。如果有一个或多个碰撞,那么对存储进目标变量的ID所代表的实例将会有特殊效果:实例被摧毁。如果没有碰撞,那么在鼠标的位置将会产生特殊效果。