從零開(kāi)始上手LuaSTG#3:如何制作“開(kāi)花”彈幕和“風(fēng)車”彈幕
大家好啊,我是SSWTLZZ,今天來(lái)點(diǎn)大家想看的東西
注意:我這里現(xiàn)在是使用的ex+ 0.83a以上的LuaSTG版本,這些版本都是不自帶編輯器的,所以我們使用sharp編輯器。
這些東西在哪里下呢?請(qǐng)看下面這篇文章↓

總之,在家中很閑,于是乎打算重置一下前面的教程。
我可能還是會(huì)比較語(yǔ)無(wú)倫次,但我會(huì)盡量把東西講的清楚一點(diǎn)(
我們看向這篇專欄的標(biāo)題??赐旰竽銜?huì)想,何為開(kāi)花彈,何為風(fēng)車彈呢?現(xiàn)在就讓我來(lái)介紹一下。
開(kāi)花彈一般指的是相對(duì)來(lái)說(shuō)密度較高,但發(fā)彈間隔較長(zhǎng),每一波相較于上一波的角度的增量較?。ㄈ绻械脑挘┑膹椖?。純狐一非,純粹的彈幕地獄都屬于典型的開(kāi)花彈幕。

而風(fēng)車彈則指的是發(fā)彈間隔較小,密度較小,每一波相較于上一波的角度的增量較大的彈幕。下圖也是一個(gè)經(jīng)典的例子。

這個(gè)就是很經(jīng)典的風(fēng)車彈了
我們可以看出“開(kāi)花”和“風(fēng)車”其實(shí)也是比較貼切的一個(gè)形容了(?)
開(kāi)花和風(fēng)車的定義并不是我們要講的內(nèi)容。
實(shí)際上開(kāi)花和風(fēng)車還能多次細(xì)分,甚至相互結(jié)合
那么,我們這期的主要目的就是復(fù)刻上面的兩個(gè)圖里面的彈幕。(部分細(xì)節(jié)沒(méi)有扣的必要,所以在這里我就不管了不對(duì)那些細(xì)節(jié)進(jìn)行復(fù)刻了)
我們先復(fù)刻這個(gè)開(kāi)花彈。首先打開(kāi)sharp編輯器,新建一個(gè)工程。還記得怎么新建工程嗎?

好的,我們新建好了一個(gè)工程。
如果你按照上圖來(lái)的話,現(xiàn)在的界面應(yīng)該是這個(gè)樣子的:

我們?cè)?strong>關(guān)卡里插入一個(gè)簡(jiǎn)單子彈(create simple bullet,在bullet選項(xiàng)卡里),彈出的窗口是選擇子彈類型,這里我們直接選擇鱗彈(arrow_big)。
如果忘記了簡(jiǎn)單子彈相關(guān)的東西,可以去看下面這篇文章復(fù)習(xí)一下↓


然后呢,我們就可以直接運(yùn)行了。點(diǎn)擊上方的綠色箭頭按鈕,就是運(yùn)行工程(run project)。
如果你沒(méi)有保存的話,那么直接點(diǎn)運(yùn)行就會(huì)讓你先保存工程,然后務(wù)必記住你保存工程的位置要不然你就找不到你的工程了

上面這張圖就是運(yùn)行結(jié)果。
彈幕的類型是不是不對(duì)?原卡應(yīng)該是藍(lán)色的光玉,問(wèn)題不大,我們可以直接改。
我們選中插入的子彈節(jié)點(diǎn),看看左邊的參數(shù)欄。

style和color分別為子彈的類型和顏色。此處style為鱗彈(arrow_big),color為紅色(COLOR_RED)。我們將style改為ball_light(光玉)以及color改為COLOR_BLUE(藍(lán)色),再運(yùn)行一下。


下圖是運(yùn)行結(jié)果。

可以看到我們的紅色鱗彈變成了藍(lán)色光玉。那么,我們?cè)撛趺磳?shí)現(xiàn)發(fā)射一圈彈幕呢?
我先放一個(gè)截圖:


那么,這個(gè)節(jié)點(diǎn),以及里面還有一個(gè)子彈節(jié)點(diǎn)是什么意思呢?
這個(gè)節(jié)點(diǎn)就是循環(huán)節(jié)點(diǎn)。
如何理解呢?我們先看這個(gè)節(jié)點(diǎn)的參數(shù)。

Times即次數(shù),代表這個(gè)節(jié)點(diǎn)里面的東西會(huì)被執(zhí)行多少次。
復(fù)刻這個(gè)彈幕的時(shí)候,這里的Times即為一圈彈幕的密度。這個(gè)取決于你,你想讓它密一點(diǎn),這個(gè)值就調(diào)大一點(diǎn)。
Number of Var即變量個(gè)數(shù),這里只用到一個(gè)"a"所以就填1。
Var 1 name,即第一個(gè)變量的名字,我們這里是"a"。
Var 1 init value,即第一個(gè)變量的初始值,復(fù)刻這個(gè)彈幕的時(shí)候,這里也取決于你。這里的“a”指的是角度,那么這個(gè)“a”的初始值就作為角度偏轉(zhuǎn)的基準(zhǔn)值。0也可以,1也可以,50也可以,在[-180,180]間隨機(jī)去一個(gè)也可以,總之取決于你。
Var 1 increment就是變量1的增量。每循環(huán)一次,變量1就會(huì)自己增加一次這個(gè)值。
這個(gè)可能比較抽象,我就以這個(gè)循環(huán)為例子:
假設(shè)a的初始值為0,增量為360/50,循環(huán)次數(shù)為50次,那么
a一開(kāi)始是0,然后發(fā)射第一顆子彈,此時(shí)a為0。發(fā)射完子彈后,a自增360/50,第一輪循環(huán)結(jié)束。
然后第二輪循環(huán)開(kāi)始。發(fā)射第二顆子彈,此時(shí)a為360 / 50,發(fā)射完子彈后,a自增360/50,第二輪循環(huán)結(jié)束。
然后第三輪循環(huán)開(kāi)始。發(fā)射第三顆子彈,此時(shí)a為360 / 50 * 2,發(fā)射完子彈后,a自增360/50,第三輪循環(huán)結(jié)束。
......
然后第五十輪循環(huán)開(kāi)始。發(fā)射第五十顆子彈,此時(shí)a為360 / 50 *?49,發(fā)射完子彈后,a自增360/50,第五十輪循環(huán)結(jié)束。
至此,循環(huán)就結(jié)束了。
我不知道你們有沒(méi)有聽(tīng)懂,反正我是聽(tīng)懂了。
稍微解釋一下為什么結(jié)果是這樣。
也沒(méi)什么好解釋的(360/50,即將360度(即一周)分為了50份,那么就是:以某個(gè)角度為初始,發(fā)射一顆子彈,角度轉(zhuǎn)一小份的量;再發(fā)射一顆,再轉(zhuǎn);直到補(bǔ)完一個(gè)圈。
至此,我們實(shí)現(xiàn)了一圈的彈幕,那么我們?nèi)绾螌?shí)現(xiàn)按照一定的間隔發(fā)射這個(gè)彈幕呢?
我們就需要再這個(gè)循環(huán)外面再套一個(gè)循環(huán)。


外層是一個(gè)循環(huán)次數(shù)為無(wú)限(_infinite)的循環(huán),里層就是用于發(fā)射一圈子彈的循環(huán)。
我們將里層看為一個(gè)整體,那么這個(gè)東西的意思就是:
間隔60幀(1秒),執(zhí)行里面的東西(即一圈開(kāi)花彈
以及我們復(fù)刻的彈幕的速度可能有點(diǎn)快,我們可以通過(guò)將簡(jiǎn)單子彈的Velocity(即速度)
從3改到2或者更低,總之細(xì)節(jié)就由你自己來(lái)調(diào)吧。
如果理解了開(kāi)花彈的話,那么風(fēng)車彈應(yīng)該也不難理解。
在我們這個(gè)基礎(chǔ)上只要把密度調(diào)小,間隔調(diào)小,就能夠做出大概的雛形了。
然后我們把彈幕類型改一下,從光玉(ball_light)改到刀彈(knife)就能做到了。


我們把a(bǔ)的增量改成了360/4,即變成了4way。
發(fā)彈的間隔從60改為了5,即發(fā)彈間隔大幅縮短。
那么我們和原卡的最大的區(qū)別是什么呢?沒(méi)有轉(zhuǎn)起來(lái)。那么,它該怎么轉(zhuǎn)起來(lái)呢?只要在第一個(gè)循環(huán)里也加一個(gè)變量,每執(zhí)行一次都會(huì)自增某個(gè)度數(shù),就可以了。


因?yàn)樵谏厦嬷v過(guò)了類似的東西,這里我就不再贅述。
把里面兩個(gè)看成一個(gè)整體,第一次外循環(huán),a1為0,再執(zhí)行里面東西,再等5幀,然后到第一次循環(huán)結(jié)束,結(jié)束時(shí)a1自增10。
然后我們看里面兩個(gè),這時(shí)的a1為0。
然后第二次外循環(huán),看里面兩個(gè),這時(shí)的a1為10,角度加10后變?yōu)?0。
第三次a1為20,加10后變?yōu)?0,以此類推,我就不重復(fù)了。
好了。這期就結(jié)束在這里吧。寫(xiě)到后面直接急了,直接不想寫(xiě)了,就算了吧(