sprite_collision_mask

使用此函数,您可以设置sprite应具有的碰撞遮罩的属性。如果选择“自动”(0)或“完整图像”(1)作为边界框模式,则可以将各个边界框值设置为0。但是,对于用户定义的掩码(2),您必须设置这些值。不同的边界框值始终相对于精灵的左上角(与X和Y原点无关),即位置(0,0)。

设置遮罩类型可设置遮罩本身的一般形状,但请注意,在解决冲突时,除矩形遮罩以外的任何遮罩都将需要更多的处理能力,从而导致性能下降。通常,只有在绝对必要的情况下,才应使用矩形以外的遮罩类型。

注意此函数不允许旋转矩形碰撞掩码类型。

可以设置的掩码类型为以下常量之一:

Bounding Box种类(形状)常量
常量描述
bboxkind_rectangularA rectangular (non-rotating) rectangle collision mask shape
bboxkind_ellipseAn elliptical collision mask shape
bboxkind_diamondA diamond collision mask shape
bboxkind_preciseA precise collision mask, where the mask will conform to the non-transparent pixels of the sprite, based on the tolerance value given (see below))


最后,容差用于定义遮罩的精确度(与"完整图像"遮罩一起使用时,这不会产生任何效果),容差为 0 意味着遮罩将遵循具有透明度的每个像素超过 0,而其他值将根据像素的透明度改变碰撞蒙版周长。

注意此函数仅适用于位图精灵,不适用于 SWF 或 JSON(Spine) 精灵。

注意此函数仅适用于添加的精灵或重复的精灵,不能直接适用于预制资源。您可以使用函数sprite_duplicate()复制精灵。

 

语法:

sprite_collision_mask(ind, sepmasks, bboxmode, bbleft, bbtop, bbright, bbbottom, kind, tolerance);

参数类型描述
indSprite Asset要设置边界框的精灵的索引。
sepmasksBoolean是为精灵的每个子图像创建碰撞遮罩(true),还是为所有子图像创建一个遮罩(false)。
bboxmodeReal使用哪种边界框。0=自动,1=完整映像,2=用户定义。
bbleftReal边界框的最大左侧位置。
bbtopReal边界框的最大顶部位置。
bbrightReal边界框的最大右侧位置。
bbbottomReal边界框的最大底部位置。
kindBounding Box种类(形状)常量掩码的种类,常量(参见说明中的表)。
toleranceReal指示透明度值中的公差(0=无公差,255=完全公差)。

 

返回

N/A

 

例子:

spr = sprite_add("player_5.png", 16, true, true, 0, 0);
sprite_collision_mask(spr, true, 1, 0, 0, 0, 0, 0, 0);

上面的代码从外部源加载精灵,并将新索引存储在变量“ SPR ”中。然后,代码将新精灵设置为对其每个子图像具有精确的碰撞遮罩。