sprite_set_alpha_from_sprite


语法:

sprite_set_alpha_from_sprite(ind, spr);

参数 描述
ind 将要被改变透明地图的精灵的索引。
spr 将被采集透明地图数据的精灵的索引。


返回

N/A(无返回值)


描述

此函数使用一个精灵的值/饱和度并将它的阿尔法通道给与目标精灵。理想状态下,此函数产生的新的阿尔法地图(ALPHA MAP)将是以灰度为尺寸的。例如白色区域的阿尔法值相当于1(不透明),黑色区域的阿尔法值相当于0(不透明),灰色区域的阿尔法值介于0到1。你在函数中提供的两个精灵都不能是永久的原始资源,否则将会出错。. . 你可以从表面或屏幕上重新创建精灵,下面的代码将显示如何影响表面。

注意此函数只对 位图 精灵有用,并且对SWF或JSON(骨骼)精灵不起作用。


下面的图片将会说明此函数如何工作。


Extended 举例:

下面的扩展代码展示了如何从两个精灵资源中创建一个特殊效果的精灵。开始我们需要一个在 创建事件 中的控制器变量。这个变量保证了这个精灵只会被创建一次。

spr_create = true;

完成之后我们需要使用 绘制事件 并且把它添加进代码中。

if spr_create
   {
   spr_create = false;
   var surf, spr;
   surf = surface_create(sprite_get_width(spr_Explosion_Alpha), sprite_get_height(spr_Explosion_Alpha));
   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, sprite_width, sprite_height, false, false, sprite_get_xoffset(spr_Gradient), sprite_get_xoffset(spr_Gradient));
   draw_clear_alpha(c_black, 0);
   draw_sprite(spr_Explosion_Alpha, 0, sprite_get_xoffset(spr_Gradient), sprite_get_xoffset(spr_Gradient));
   spr = sprite_create_from_surface(surf, 0, 0, sprite_width, sprite_height, false, false, sprite_get_xoffset(spr_Gradient), sprite_get_xoffset(spr_Gradient));
   surface_reset_target();
   surface_free(surf);
   sprite_set_alpha_from_sprite(sprite_index, spr);
   sprite_delete(spr);
   }
draw_sprite(sprite_index, 0, x, y);

上述代码首先检查控制变量是否为真。如果是的话,它就设置精灵的阿尔法,然后将变量设为false来防止代码被多次执行。之后,它将创建与阿尔法遮罩相同尺寸的表面。然后绘制一个在表面上改变阿尔法值的精灵,并从上面创建一个新精灵并将它的索引赋给 sprite_index 。然后此代码将清除表面,然后绘制一个阿尔法地图精灵,并创建另一个精灵,并将后者的索引存储进本地变量。最后,被赋予新精灵的物体将从一个合适的精灵上得到阿尔法,然后移除表面和合适的精灵。

还有一件事,不再使用精灵时请将它们从存储中移除。. 这在 毁灭事件(Destroy Event)房间终止事件(Room End Event) 将会是这样的:

sprite_delete(sprite_index);