欢迎光临散文网 会员登陆 & 注册

从零开始上手LuaSTG#3:如何制作“开花”弹幕和“风车”弹幕

2022-12-22 19:19 作者:SSWTLZZ  | 我要投稿

大家好啊,我是SSWTLZZ,今天来点大家想看的东西
注意:我这里现在是使用的ex+ 0.83a以上的LuaSTG版本,这些版本都是不自带编辑器的,所以我们使用sharp编辑器。

这些东西在哪里下呢?请看下面这篇文章↓


总之,在家中很闲,于是乎打算重置一下前面的教程。
我可能还是会比较语无伦次,但我会尽量把东西讲的清楚一点(


我们看向这篇专栏的标题。看完后你会想,何为开花弹,何为风车弹呢?现在就让我来介绍一下。

开花弹一般指的是相对来说密度较高,但发弹间隔较长,每一波相较于上一波的角度的增量较小(如果有的话)的弹幕。纯狐一非,纯粹的弹幕地狱都属于典型的开花弹幕。

这个也是很经典的开花弹

风车弹则指的是发弹间隔较小,密度较小,每一波相较于上一波的角度的增量较大的弹幕。下图也是一个经典的例子。


这个就是很经典的风车弹了

我们可以看出“开花”和“风车”其实也是比较贴切的一个形容了(?)
开花和风车的定义并不是我们要讲的内容。
实际上开花和风车还能多次细分,甚至相互结合

那么,我们这期的主要目的就是复刻上面的两个图里面的弹幕。(部分细节没有扣的必要,所以在这里我就不管了不对那些细节进行复刻了)

我们先复刻这个开花弹。首先打开sharp编辑器,新建一个工程。还记得怎么新建工程吗?

这样新建工程

好的,我们新建好了一个工程。
如果你按照上图来的话,现在的界面应该是这个样子的:

我们在关卡里插入一个简单子弹(create simple bullet,在bullet选项卡里),弹出的窗口是选择子弹类型,这里我们直接选择鳞弹(arrow_big)。

如果忘记了简单子弹相关的东西,可以去看下面这篇文章复习一下↓

然后呢,我们就可以直接运行了。点击上方的绿色箭头按钮,就是运行工程(run project)
如果你没有保存的话,那么直接点运行就会让你先保存工程,然后务必记住你保存工程的位置要不然你就找不到你的工程了

上面这张图就是运行结果。
弹幕的类型是不是不对?原卡应该是蓝色的光玉,问题不大,我们可以直接改。

我们选中插入的子弹节点,看看左边的参数栏。

style和color分别为子弹的类型和颜色。此处style为鳞弹(arrow_big),color为红色(COLOR_RED)。我们将style改为ball_light(光玉)以及color改为COLOR_BLUE(蓝色),再运行一下。

下图是运行结果。

可以看到我们的红色鳞弹变成了蓝色光玉。那么,我们该怎么实现发射一圈弹幕呢?
我先放一个截图:

那么,这个节点,以及里面还有一个子弹节点是什么意思呢?
这个节点就是循环节点。

如何理解呢?我们先看这个节点的参数。

Times即次数,代表这个节点里面的东西会被执行多少次。
复刻这个弹幕的时候,这里的Times即为一圈弹幕的密度。这个取决于你,你想让它密一点,这个值就调大一点。

Number of Var即变量个数,这里只用到一个"a"所以就填1。
Var 1 name,即第一个变量的名字,我们这里是"a"。
Var 1 init value,即第一个变量的初始,复刻这个弹幕的时候,这里也取决于你。这里的“a”指的是角度,那么这个“a”的初始值就作为角度偏转基准值。0也可以,1也可以,50也可以,在[-180,180]间随机去一个也可以,总之取决于你。

Var 1 increment就是变量1的增量。每循环一次,变量1就会自己增加一次这个值。

这个可能比较抽象,我就以这个循环为例子:
假设a的初始值为0,增量为360/50,循环次数为50次,那么
a一开始是0,然后发射第一颗子弹,此时a为0。发射完子弹后,a自增360/50,第一轮循环结束。
然后第二轮循环开始。发射第二颗子弹,此时a为360 / 50,发射完子弹后,a自增360/50,第二轮循环结束。
然后第三轮循环开始。发射第三颗子弹,此时a为360 / 50 * 2,发射完子弹后,a自增360/50,第三轮循环结束。
......
然后第五十轮循环开始。发射第五十颗子弹,此时a为360 / 50 * 49,发射完子弹后,a自增360/50,第五十轮循环结束。
至此,循环就结束了。

我不知道你们有没有听懂,反正我是听懂了。
稍微解释一下为什么结果是这样。
也没什么好解释的(360/50,即将360度(即一周)分为了50份,那么就是:以某个角度为初始,发射一颗子弹,角度转一小份的量;再发射一颗,再转;直到补完一个圈。

至此,我们实现了一圈的弹幕,那么我们如何实现按照一定的间隔发射这个弹幕呢?
我们就需要再这个循环外面再套一个循环

(游戏里按F12可以开关作弊)

外层是一个循环次数为无限(_infinite)的循环,里层就是用于发射一圈子弹的循环。
我们将里层看为一个整体,那么这个东西的意思就是:

间隔60帧(1秒),执行里面的东西(即一圈开花弹

以及我们复刻的弹幕的速度可能有点快,我们可以通过将简单子弹的Velocity(即速度
从3改到2或者更低,总之细节就由你自己来调吧。

如果理解了开花弹的话,那么风车弹应该也不难理解。
在我们这个基础上只要把密度调小间隔调小,就能够做出大概的雏形了。

然后我们把弹幕类型改一下,从光玉(ball_light)改到刀弹(knife)就能做到了。

我们把a的增量改成了360/4,即变成了4way。
发弹的间隔从60改为了5,即发弹间隔大幅缩短。

那么我们和原卡的最大的区别是什么呢?没有转起来。那么,它该怎么转起来呢?只要在第一个循环里也加一个变量,每执行一次都会自增某个度数,就可以了。

因为在上面讲过了类似的东西,这里我就不再赘述。
把里面两个看成一个整体,第一次外循环,a1为0,再执行里面东西,再等5帧,然后到第一次循环结束,结束时a1自增10。
然后我们看里面两个,这时的a1为0
然后第二次外循环,看里面两个,这时的a1为10,角度加10后变为20。

第三次a1为20,加10后变为30,以此类推,我就不重复了。

好了。这期就结束在这里吧。写到后面直接急了,直接不想写了,就算了吧(

从零开始上手LuaSTG#3:如何制作“开花”弹幕和“风车”弹幕的评论 (共 条)

分享到微博请遵守国家法律