sprite_create_from_surface

使用此函数,您可以从先前初始化的表面创建sprite(当您使用Surface_create()创建表面时,将返回表面索引ID值)。然后你在函数中输入的X和y坐标应该相对于表面(左上角)的(0,0)位置,而不是游戏窗口(也不是视图,如果你有一个活动的)。宽度和高度参数以像素为单位,并定义要使用的表面部分的宽度和高度。

将 "removeback" 参数设置为 true 将从精灵中删除一种颜色,方法是检查精灵的 左下角 像素中的颜色,然后使用该像素作为要移除的颜色。当启用 "removeback" 时,表面的 Alpha 通道将被忽略,这意味着除 " 背景色 " 之外的所有像素都变得完全不透明。

如果您选择“ RemoveBack ”选项,您可能还希望GameMaker通过将“ Smooth ”参数设置为true来平滑精灵的边缘。所有这些都是在精灵的背景被移除后,在精灵的边缘创建一个半透明的边界。

最后,您还可以为精灵指定X和Y原点。这是精灵被“固定”到使用它的实例上的点,并且总是相对于一个精灵子图像的左上角0,0来计算。因此,例如,将这些值设置为(16,16)的32 X 32像素的精灵将使其原点位于中心。

默认情况下,所有新的精灵都会自动计算其边界框(确切的边界框将取决于精灵的大小和透明度),但是您可能希望对此进行自定义,在这种情况下,您还应该使用函数sprite_collision_mask()

注意 当您使用此方法在GameMaker中创建精灵时,必须记住在不再需要时再次将其删除(使用sprite_delete()),否则存在内存泄漏的风险,这将降低游戏速度并最终使游戏崩溃。

注意 此函数仅适用于使用 surface_rgba8unorm (默认)表面 格式的表面 。

 

语法:

sprite_create_from_surface(index, x, y, w, h, removeback, smooth, xorig, yorig);

参数类型描述
indexSurface要创建的surface的索引。
xReal要从中复制的X位置。
yReal要复制的Y位置。
wReal要复制的区域的宽度(从X位置)。
hReal要复制的区域的高度(从Y位置)。
removebackBoolean指示是否将具有背景色的所有像素(左下像素)设置为透明。
smoothBoolean指示是否平滑边缘。
xorigReal指示原点在精灵中的X位置。
yorigReal指示原点在精灵中的Y位置。

 

返回

Sprite Asset

 

例子:

var surf;
surf = surface_create(32, 32);
surface_set_target(surf);
draw_clear_alpha(c_black, 0);
draw_sprite(spr_Body, 0, 0, 0);
draw_sprite(spr_Clothes, 0, 0, 0);
draw_sprite(spr_Hair, 0, 0, 0);
spr_custom = sprite_create_from_surface(surf, 0, 0, 32, 32, true, true, 16, 16);
surface_reset_target();
surface_free(surf);

上面的代码创建了一个表面,并将其索引存储在局部变量“ surf ”中。然后,它以该表面为目标,清除该表面,并在彼此的顶部绘制多个精灵。最后,它从绘制在表面上的合成图像创建一个新的精灵,并在释放表面使用的内存之前将其索引分配给“ SPR_自定义”。