sprite_replace

此函数的工作方式几乎与sprite_add()完全相同,唯一的不同之处在于,它不是返回正在导入的精灵的索引,而是覆盖以前创建的精灵索引。使用此函数时,您应该使用已创建并存储在变量中的精灵索引,而不是使用资源树精灵资源,该变量使用其他函数,如sprite_add()sprite_create_from_surface(),或甚至sprite_duplicate()。您可以使用此函数替换游戏资源中的精灵,但这样做意味着您将丢失要替换的精灵的引用ID,无论您是否调用game_restart(),因此不建议这样做。无论替换哪个精灵,此函数都将为精灵创建一个新的纹理页面,因此在使用它时应小心,因为它可能会增加渲染所需的纹理交换数量,从而对性能产生不利影响。

要加载的图像文件应 始终*.png 格式和所有要转换为动画精灵的图像都应该具有“条带”格式(见下图)。它们将按照规则 精灵宽度 = 条带宽度 / 子图像 分割为指定数量的子图像。

Example Sprite Strip

正如您在上图中所看到的,精灵被放置在深紫色的背景上,这可以通过将“ removeBack ”参数设置为true来删除。它的工作原理是检查精灵的左下像素的颜色,然后将其用作要删除的颜色。例如,在上面的图像中,如果我们将左下角的像素颜色设置为绿色,则精灵的所有绿色部分都将被删除,而紫色背景的其余部分将被忽略。

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

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

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

注意根据所选的目标平台,您保存和加载文件的位置会受到限制。如需了解更多信息,请参阅文件系统

注意您应该注意,如果您在 HTML5 目标游戏中使用此函数从外部服务器加载资源,那么,由于浏览器中的 XSS 保护,尝试跨域加载资源可能会失败。被阻止,并且可能会返回空白结果。

 

语法:

sprite_replace(ind, fname, imgnumb, removeback, smooth, xorig, yorig);

参数类型描述
indSprite Asset要永久替换的精灵的索引。
fnameString要创建新精灵的图像的文件名。
imgnumbReal精灵将被水平分割的帧数。将1用于单个图像或*.GIF
removebackBoolean指示是否将具有背景色的所有像素(左下像素)设置为透明。
smoothBoolean指示是否平滑边缘。
xorigReal原点的X坐标,相对于精灵的左上角。
yorigReal原点的Y坐标,相对于精灵的左上角。

 

返回

N/A

 

例子:

sprite_replace(spr_banner, "gravemaker.png", 1, false, false, 0, 0);

上面的代码将“ SPR_横幅”中索引的图像资源替换为从外部源加载的另一个图像资源。