如果形状发生碰撞


描述

此动作是用来检查是否有一个实例与给定的物体的给定区域或某条线有碰撞。你需要给出此物体需要检查碰撞区域的形状,例如方形,椭圆或线,你还要提供此形状左上角或右下角的坐标位置,如果形状是条线,那么你需要提供起点和终点的位置。位置可以是房间内的绝对位置,或者是与这个动作的实例所在的相对位置。你可以在下面的图片中看到这是如何工作的: 是否与图像发生碰撞例子

正如你所看到的,此结果将取决于被检查的实例的碰撞遮罩,这意味着被检查的实例 必须 有一个被分配给sprite_index的精灵, 或被分配给 mask_index的精灵。如果不这样,它将不会被这些函数检测到,无论它是否绘制了精灵。值得注意的是如果某实例完全进入方形或椭圆的边界框,那么也将检测到碰撞。The action will evaluate to true if a collision is detected, or false otherwise, although you can also check the Not flag to check if there is not a collision with the given shaped area, and the action will then only evaluate as true if no collisions are found, otherwise it will evaluate as false. You can also set the Exclude Self option to exclude the calling instance from the collision check.

接下来你可以选中/不选中 返回列表的选项。Checking this means the action will create and populate a list data structure with allinstances in collision with the shape and set the Target variable to the DS list ID. 要是你不选中,如果没有碰撞发生,目标 变量将被设为小于0的数,或者所有发生碰撞的实例中一个 实例的独特ID,也就是说如果有多个实例发生碰撞,你只能知道其中一个实例的ID而不知道其它的,除非你使用了列表(将return list选中)。

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

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

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


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


动作语法:

如果与图形发生碰撞例子


参数:

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


例如:

如果发生形状碰撞的例子
The above action block code checks for a collision with any instances of the object "obj_Enemy" within a 100px circle around the calling instances position. The action generates a list of all instances found to be in collision and stores the list ID in the Target variable. If the action evaluates to true then the list is looped through and each instance with its ID stored in the list has its "hp" variable reduced by 1. The DS list is then freed.