sprite_add

使用此函数,您可以将图像添加为精灵,从外部源加载它,其中要加载的图像文件应始终*png 中,*.gif*.jpg/jpeg*.json 格式 (*json 文件用于加载使用 spine 制作的 骨骼动画精灵 )。该函数返回新的精灵索引,然后必须在与该精灵相关的所有其他代码中使用该索引。如果您将此函数与 HTML5 一起使用,或者从 URL 获取图像,则此函数还将生成一个图像已加载{}{}异步事件。

要转换为动画精灵的所有图像-*.gif除外。(见下图)-应具有条带格式(见下图),并将按照规则 精灵宽度=条带宽度/子图像 将其拆分为指定数量的子图像。

Example Sprite Strip

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

当启用 "removeback" 时,源图像的 Alpha 通道被忽略,这意味着除"背景色"之外的所有像素都变得完全不透明。

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

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

如果您正在添加一个*.GIF格式图像,则只需指定文件名和图像编号(第一帧的图像编号应为1),并且可以将所有其他参数保留为0,注意只会加载GIF的第一个图像。对于*.JSON精灵,图像编号应为1,并且“ RemoveBack ”和“ Smooth ”设置将被忽略。

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

需要注意的是,以这种方式添加精灵时所使用的内存将比您预期的要大。这是因为GameMaker会将精灵存储为纹理页,并且它还会存储在GPU内存中,因此总内存将大于相同精灵的图像文件的预期内存。

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

注意iOS 上,如果您要从文件夹加载包含的文件,即:路径类似于 "Backgrounds/background1.png",则不需要将该文件夹作为路径的一部分,只需提供文件名即可。在所有其他平台上,您必须将文件夹作为文件路径的一部分提供。

注意HTML5 上,如果您从安全服务器加载精灵,则可能需要设置跨域类型,并使用相对路径而不是绝对路径。更多详细信息请参阅 http_set_request_crossorigin

 

语法:

sprite_add(fname, imgnumb, removeback, smooth, xorig, yorig);

参数类型描述
fnameString要添加的文件的名称(字符串文件路径)。
imgnumReal用于指示子图像的数量(1表示单个图像或*.GIF)。
removebackBoolean指示是否将具有背景色的所有像素(左下像素)设置为透明。
smoothBoolean指示透明时是否平滑边缘。
xorigReal指示原点在精灵中的X位置。
yorigReal指示原点在精灵中的Y位置。

 

返回:

Sprite Asset

 

例子:

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

上面的代码将精灵加载到游戏中,并将其索引存储在变量 spr 中。