技术背景
《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的方式,如果你有兴趣,可以自己尝试实现。
资源文件下载
暂无关于此日志的评论。