
技术背景
《Nuclear Throne》是使用GameMaker Studio开发的,但随着技术的更新,GameMaker Studio 2已经推出,因此我的这次分享将基于GameMaker Studio 2进行,这并不意味着GameMaker Studio 2是实现这种效果的唯一选择。
假设与原理
通过查看游戏的sprite sheet,发现了一个与漩涡颜色一样的图像,我的猜测将基于此展开。

这个猜想非常简单:通过连续创建不同角度且逐渐放大的图像实现漩涡。在GameMaker Studio 2中,这可以通过使用对象的内置变量image_angle和image_scale来实现。
前期准备
首先,创建一个Spiral对象并导入Sprite,它用于组成漩涡。接着,我创建了一个SpiralFactory对象来管理Spiral对象的创建与销毁。至此,准备工作就完成了。
编程实现
//Spiral
//Create
zoomFactor = 0;
size = 2;
zoom = 10;
rSpeed = 0.0004;
image_xscale = 0;
image_yscale = 0;
//Step
zoomFactor = zoomFactor + 0.0002 + rSpeed * image_xscale;
image_xscale += zoomFactor;
image_yscale += zoomFactor;
if (image_xscale > size) {
instance_destroy();
}
//Draw
draw_sprite_ext(sprite_index, -1, x, y, image_xscale * zoom, image_yscale * zoom, image_angle, image_blend, 1);
draw_sprite_ext(sprite_index, -1, x, y, image_xscale * zoom, image_yscale * zoom, image_angle, c_black, 1 - image_xscale);zoomFactor用于控制图像的放大速度,rSpeed控制zoomFactor的增加速度,size是图像的最大放大值。你也可以有自己的控制速度的方法。
第二个draw_sprite_ext用于绘制一个透明度随着缩放变化的黑色图像,使漩涡看起来有一个阴影在中心。
//SpiralFactory
//Create
x = room_width / 2;
y = room_height / 2;
image_angle = random(360);
aSpeed = 6;
//hue = 0;
repeat (120) {
with (oSpiralFactory)
event_perform(ev_step, ev_step_normal);
with (oSpiral)
event_perform(ev_step, ev_step_normal);
}
//Step
image_angle += aSpeed;
x = room_width / 2 + 80 * cos(image_angle / aSpeed * pi / 180);
y = room_height / 2 + 45 * sin(image_angle / aSpeed * pi / 180);
with (instance_create_layer(x, y, "Instances", oSpiral)) {
image_angle = other.image_angle
//image_blend = make_color_hsv(other.hue, 255, 255);
}
//hue++;
//if (hue > 255) {
// hue = 0;
//}
//DrawGUI
draw_text(16, 16, $"Spiral number: {instance_number(oSpiral)}");Create中120不是一个magic number,提前执行这两个对象的step事件,让游戏开始时就可以看到完整的漩涡。
Step中,x、y的移动方式是漩涡围绕中心旋转。
DrawGUI作用是查看总共有多少个Spiral对象。
颜色渐变
为了增加视觉效果,使用make_color_hsv方法来改变螺旋的颜色,实现了一种有趣的颜色渐变效果。你也可以在此基础上进行探索,发掘更多有变化效果,比如真结局的那个中描边效果。

结论
虽然无法直接确认《Nuclear Throne》漩涡背景的具体绘制方法,但通过分析sprite sheet,我找到了一种可能的实现方式。正如我在开头所说,GameMaker Studio并不是实现这种效果的唯一选择。这里有一个使用Shader的方式,如果你有兴趣,可以自己尝试实现。
资源文件下载

暂无关于此日志的评论。