我知道GameMaker在2024.13版本中支持svg格式,能够导入一个SVG并将其作为一个精灵。这种功能很有用,但它是一个图像导入器,单帧,无动画,一旦导入后就变成了静态图片。至今还没有办法在代码中构建或编辑路径,结合形状进行布尔运算,实时应用渐变或剪裁路径,或者在实际矢量几何体上进行碰撞检测而不是使用边界盒。
我已经在过去2到3个月里工作了这个项目,GMVex是一个完整的基于程序的矢量图形框架,适用于GML,而不是一个图像导入器。
功能
- 基于贝塞尔曲线、弧线和曲线的路径构建
- 填充、描边和渐变渲染(平坦、线性和径向渐变,包括在描边上)
- 分层变换和组
- 布尔运算(并集、交集、差集)
- 掩码和剪裁路径,包括多形状和对象边界盒单位
- 真实的TrueType字体渲染,支持间距和连字
- SVG导入
- 虹彩模式
- 真实碰撞检测
示例代码:
// Create
gmvex_init();
var disc = gmvex_path_create();
gmvex_path_add_circle(disc, 150, 150, 80);
var bite = gmvex_path_create();
gmvex_path_add_circle(bite, 205, 150, 80);
crescent = gmvex_path_boolean(disc, bite, gmvex_bool.A_NOT_C);
gmvex_path_destroy(disc);
gmvex_path_destroy(bite);
// Draw
gmvex_fill_draw_gradient(crescent, gmvex_gradient.RADIAL, 170, 140, 90, 0, [[0, make_color_rgb(255, 220, 130), 1], [1, make_color_rgb(255, 110, 40), 1]] );
gmvex_stroke_draw(crescent, 3, make_color_rgb(255, 240, 200), 0.8);
// Cleanup
gmvex_path_destroy(crescent);
(你可以在文章顶部的画廊中看到结果,它是一个橙色月亮形状)
我决定发布这个项目,因为我认为它已经进展到了一定程度,并且准备好发布。到目前为止,我工作最辛苦的项目之一,仍在不断改进中。 我认为这将是最有用的功能,因为GameMaker缺乏矢量特性。假设你正在构建一个使用向量艺术的关卡,一个弯曲的平台边缘,一个曲折的路径,装饰性形状,测试过程中你想调整曲线。 这意味着打开你的向量编辑器,进行修改,重新导出图像,重新导入到GameMaker中。 每次调整都意味着在你的项目中移动实际曲线数据,而不是图像,你通过实际曲线点构建它,改变它意味着直接在GameMaker中移动一个点。 没有导出,没有重新导入,没有离开编辑器。 这对你不断迭代的关卡编辑来说尤其重要。 这只是无数例子的其中一个。
它是开源的,MIT许可证,免费使用在商业项目中。
Github仓库:https://github.com/erkan612/GMVex
评论 (0)