非位图精灵

GameMaker 支持非位图精灵,其形式为矢量 SWF 文件或 Spine 骨骼动画文件。这两种格式各有利弊,下面的两节介绍了如何将它们导入到精灵编辑器中,并介绍了一些有关如何绘制它们的信息。

请注意,可以导入 SVG,但它们在导入时会转换为位图。

骨骼动画精灵(Spine)

使用骨骼动画制作的精灵是其中已创建基础"骨骼"并使用关键帧设置动画以随时间移动骨骼的组件部分的精灵。然后从纹理图集中蒙皮该骨骼,并以多种文件类型之一导出生成的动画。GameMaker允许您导入此类精灵,只要它已导出为*.json格式的文件,并且在同一目录中具有正确关联的纹理图集文件(*.atlas)和图像文件(作为*.png)

Spine UI当前 GameMaker 只能从程序 Spine 生成的 JSON 格式文件中导入矢量图像,但是将它们导入程序的方法与添加普通位图图像的方法几乎相同。要添加骨骼动画,您需要创建新的精灵,这将打开标准的加载精灵对话框,只需在此处确保已从底部的文件筛选器中选择了 *.json

Import Spine Sprite

单击"加载"按钮将骨骼动画作为精灵添加到资源浏览器,并在处理文件时显示进度条。请注意,根据文件的复杂性,这可能需要一两分钟的时间。处理完成后,您将返回到精灵属性对话框,现在显示如下:

Spine SPrite In The Sprite Editor导入动画后,可以设置碰撞属性,但请注意,此处仅限于使用精确碰撞或边界框碰撞,并且骨骼动画的碰撞数据显式取自提供的数据。如果导入的文件中缺少数据,GameMaker将不会生成任何冲突掩码,这意味着如果在用于创建正在导入的图像的程序中未正确设置掩码,则不会发生工作冲突。

注意由于骨骼动画的复杂性,sprite编辑器中显示的预览图像不是为了准确地表示动画,而是为您提供表示动画的简单图像,以便在房间编辑器中可视化。

与位图精灵不同,导入的骨骼动画精灵 无法在编辑器 中以任何方式进行修改,但 GameMaker 语言 (GML) 中有许多可用的函数,这些函数可用于更改外观、设置属性以及控制动画的其他方面。也不能为精灵设置任何纹理选项,因为 GameMaker 将使用由生成精灵的程序生成的提供的纹理图集。

在导入骨骼动画精灵时,有许多事情需要注意,其中最重要的是,由于技术原因,某些精灵绘制和精灵管理功能不受支持,特别是那些仅绘制精灵部分的绘制功能,或者以某种方式"倾斜"位置(有关详细信息,请参见个人draw_sprite_*()功能)。但是,基本的精灵绘制功能和内置的精灵变量都是完全支持的。除了这些函数和变量之外,还可以使用特殊skeleton_*函数设置和更改动画属性,这些函数在骨骼动画{}的参考部分中列出并说明。

矢量精灵(SWF)

一般来说,非位图精灵中的所有精灵都使用位图,尽管位图在内容方面很灵活,但在内存使用变得过高之前,它会对精灵中可能的帧的大小和数量进行限制。矢量精灵通过以不同的方式存储和绘制其内容来解决这些限制:像素网格在缩放时可能会变得块状或模糊,而不是像素网格,而是使用矢量数学将它们绘制为三角形,并且可以在不失去清晰度的情况下放大(或缩小),如下图所示:

Vector And Bitmap Sprite Comparison为了帮助您直观了解如何完成此操作,下面的图像只是同一矢量的Fireman 精灵,现在我们可以在GameMaker中查看用于制作图像的多边形:

Polygons Of A Vector Sprite但是,对于编程游戏来说,没有什么是绝对自由的,矢量精灵的权衡比位图精灵的绘制成本更高,并且随着导入的动画的复杂性增加,这种速度差异也会增加。此外,与位图精灵不同,它们的内存使用受到视觉复杂性的影响。考虑到这一点,它们确实能够以使用传统位图精灵不可能实现的方式添加大型动画图形。

在性能方程的另一面,因为矢量精灵只绘制绝对需要的像素(不像位图精灵也"绘制"图像周围的空白),所以从Gpu的角度来看,它们可以更便宜。此外,在一般情况下,向量精灵远小于其等效位图-对于上面的消防员示例,各种精灵类型的大小如下所示:

Bitmap at 70x68 = 4x70x68 bytes x 12 frames = 223k
Vector = 54k

如果将精灵的分辨率提高两倍:

Bitmap at 280x272 = 4x280x272 bytes x 12 frames = 3570k
Vector = 54k

因此,正如您可以看到的那样,使用矢量精灵可以潜在地节省大量内存,而且我们在未来的空间节省方面仍然有很大的潜力。

GameMaker目前对矢量精灵的支持有限。并且只能从SWF格式文件导入矢量图像。将它们导入程序的方式几乎与添加普通位图图像的方式相同。若要添加矢量精灵,请创建新的精灵,这将打开标准的"加载精灵"对话框,但请确保已从底部的文件筛选器中选择了*.swf

Import Vector Image单击"加载"按钮将向量图像或动画添加到资源浏览器,并在处理文件时显示进度条。请注意,根据文件的复杂程度,这可能需要一段时间(对于更复杂的动画,最多需要一分钟)。处理完成后,您将返回到精灵属性对话框,现在显示如下:

Disabled Texture Settings精灵编辑器不会有太多更改,但现在编辑图像 ;按钮已灰显,无法单击,因为在这种精灵中没有任何位图可供编辑。其次,除纹理组外,所有纹理选项都已灰显。

注意图像在所选预览编辑器中的外观与在游戏中的外观不同,也不同于在sprite编辑器的预览窗口中的外观。矢量图像将以创建时的大小导入,该大小不一定是预览显示时的大小(例如,浏览器通常会缩放图像以适应图像大小)。

"精灵编辑器"(Sprite Editor)的另一个功能是,我们可以设置矢量精灵的质量通过使用顶部的SWF精度滑块绘制矢量精灵。这将简单地减少或增加用于生成精灵的三角形的数量-大多数游戏通常情况下,大约50%的值就足够了-但是,如果使用极端缩放或存在性能问题,则应使用此值进行实验。

在导入矢量精灵时,有许多事情需要注意,最重要的是,由于技术原因,某些sprite绘制和sprite管理功能不受支持,特别是那些仅绘制精灵的一部分的绘制功能,或者以某种方式"倾斜"位置的绘制功能(有关详细信息,请参见个人draw_sprite_*()功能)。但是,基本的精灵绘制功能和内置的精灵变量都是完全支持的。我们可以为正在绘制的SWF精灵设置不同的抗锯齿(AA)值通过使用函数draw_enable_swf_aa(),draw_get_swf_aa_level()draw_set_swf_a_level()

您还应注意以下事项: