sprite_set_alpha_from_sprite

此函数使用一个精灵的值/饱和度,并将其与目标精灵的Alpha相乘。理想地,用于生成新的阿尔法图的精灵应该是灰度级的,其中白色区域具有等效的阿尔法值1(不透明),黑色区域等效于阿尔法0(透明),而灰色区域是介于0和1之间的阿尔法。您正在设置的alpha的精灵不能是永久资源,您用来设置alpha的精灵也不能是永久资源{},因为这样会出错。这意味着您必须以某种方式“即时”创建两个全新的精灵,才能使该函数正常工作。这可以通过使用表面或从屏幕创建精灵来实现(下面的代码示例显示了如何使用表面实现该效果)。

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

下图说明了此函数的工作原理:

Sprite Set Alpha Example

 

语法:

sprite_set_alpha_from_sprite(ind, spr);

参数类型描述
indSprite Asset要更改透明贴图的精灵的索引。
sprSprite Asset要从中获取透明贴图数据的精灵的索引。

 

返回

N/A

 

扩展示例:

在这个扩展的例子中,我们展示了如何从两个精灵资源中创建一个特殊效果精灵。首先,我们需要在实例的创建事件中有一个控制器变量。此变量用于确保只创建一次sprite:

spr_create = true;

完成后,我们需要转到Draw事件并添加以下代码:

if (spr_create)
{
    spr_create = false;
    var _sw = sprite_get_width(spr_Explosion_Alpha);
    var _sh = sprite_get_height(spr_Explosion_Alpha);
    var _xo = sprite_get_xoffset(spr_Gradient);
    var _yo = sprite_get_yoffset(spr_Gradient);
    var _surf = surface_create(_sw, _sh);
    surface_set_target(_surf);
    draw_clear_alpha(c_black, 0);
    draw_sprite(spr_Gradient, 0, 0, 0);
    sprite_index = sprite_create_from_surface(_surf, 0, 0, _sw, _sh, false, false, _xo, _yo);
    draw_clear_alpha(c_black, 0);
    draw_sprite(spr_Explosion_Alpha, 0, _xo, _yo);
    var _spr = sprite_create_from_surface(_surf, 0, 0, _sw, _sh, false, false, _xo, _yo);
    surface_reset_target();
    surface_free(_surf);
    sprite_set_alpha_from_sprite(sprite_index, _spr);
    sprite_delete(_spr);
}

draw_sprite(sprite_index, 0, x, y);

上面的代码首先检查控制变量是否为true,如果为true,则运行代码以设置sprite alpha,将变量设置为false以防止代码多次运行。在本例中,它创建了一个我们希望使用的alpha遮罩大小的表面,然后将要更改其alpha的精灵绘制到该表面上,并从中创建一个新的精灵,将其指定为对象的sprite_索引。然后,代码清除表面并将Alpha Map Sprite绘制到该表面,并创建另一个新的精灵,将其索引存储在局部变量中。最后,分配给对象的新sprite从该临时sprite获得其alpha集,释放表面并移除临时sprite.

这里还有最后一件事要做,那就是在不使用时从内存中删除为对象创建的精灵.这将在销毁事件房间结束事件中完成,如下所示:

sprite_delete(sprite_index);