————————————————————
如果你是個新手,現在講一些複雜的觸發器,基本上你會看不懂,所以咱們這章主要講思想,這種抽象的東西可能會改變你未來的觸發器風格,魯迅曾經說過:“觸發器要從娃娃抓起”,觸發器風格一旦形成,在後天將難以改變,所以此章將帶領各位新手走到正確的方向上,這對於你們以後的發展是大有裨益的。
觸發器技術分為兩個大類,一個是函數的運用,一個是算法與數據結構。前者是形,後者是神,只有形神兼備,才能打造頂級的觸發器。形,即外在,這裡指函數的運用,這是新手期作者主要的研究內容,只有熟悉各種函數的使用,才能在這個架子上搭載我們的“神”,即內在,它看不見,但是卻是打破觸發器瓶頸的那把唯一的錘子,就像內功一樣,雖然無形,但卻有質,這種東西需要在不斷的作圖中形成,而本教程將直接將這些知識灌輸給你,希望你可以從中獲得一點點啟發。
本章講的特殊玩法,是比較廣義的,包含Boss、耐久和純特殊玩法等等需要使用大量觸發器的地圖,關於Boss製作的教程,網上也有不少,我們這裡就不做講解了。
這裡給出官方文檔的Boss教程:
https://easydoc.net/s/85829661/USXlrH6u/jomA211r
好了,接下來看看本章咱們的知識點:
· 觸發器的數據流
· 封裝思想
· 數學
· 算法
· 數據映射
· 輸入層、邏輯層、顯示層
觸發器的數據流
在研究數據流之前,我們先思考一下觸發器的本質是什麼,它有事件、有條件、有動作,綜合來看,它是一種在指定時機下能自動執行的腳本(也就是動作)。事件和條件選擇符合的時機,動作提供操作,所以觸發器的數據運行全在動作中,這裡的數據,指的是咱們上一章講過的所有數據類型。



封裝思想:
前面提到的“高內聚”實際上就是封裝思想了,也就是將觸發器當做一個盒子,把動作裝進去,讓數據流在其中流動,而這個盒子對外只有輸入接口和輸出接口,這種對觸發器進行封裝的思想,在特殊玩法中尤其重要。

但是!由於觸發器和編程不同,編程上可以很好的應用這套標準,而觸發器畢竟是不同於編程的,所以比如一些無需對外做信息交流的觸發器則不需要輸出,當然輸入一般得有。而且更妙的是,多個觸發器可以共同封裝,封裝也可以嵌套(套娃),如下圖所示:

以下舉例封裝形式的觸發器:
初始化時定義一個整數作為輸入:



數學:
計算機為啥叫計算機?顧名思義,它能做的事就是計算,它乾的最主要的事也就是對數字進行加減乘除(CPU)和存取(ROM/RAM),任意的程序或應用軟件,都是基於數學的,一個程序,實際上本質就是對數字做運算,所以說,觸發器也是如此,玩觸發器到達比較高的層次後,基本上都是在玩數學。
千萬不要覺得數學是枯燥的,因為你可能只是受到了9年義務教育的鞭撻,“享受”著數學課本里那些複雜的公式以及晦澀難懂的專業性語句(簡稱:不說人話)的薰陶,而這只是應試教育氾濫的結果。實際上,數學是非常美妙的,美的有時候你都不知道為什麼會這麼巧,有些公式雖然難以記憶,但是公式之間竟然有著出奇的一致性,即使它們的推導過程並不相同。生活在互聯網時代,或者說是數字化時代,數學,是每個人都應該瞭解的一門“必修課”,如果你有幸在未來成為了觸發器大佬,你也一定會感受到數學的強大魅力,因為強大的觸發器,往往需要一些數學知識,你在以前學習的數學知識,可能真的可以在編輯器中得到應用,而不是僅僅被考試所踐踏!
使用數學最多的玩法是耐久,耐久中的各種花式彈幕,其實就是一個個的數學函數描繪的。
比如愛心曲線的參數方程(其中,t為從0到2π):







算法:
算法,即計算方法,常用於純特殊玩法中,當然算法一聽名字就知道又是和數學相關,算法的百度解釋是:解題方案的準確而完整的描述。這又是什麼不當人的話??簡單來說,算法就是根據一定的輸入,經過一系列的計算流程,得到最終的輸出結果,其實就跟解數學題目類似,題中給出已知條件,我們通過一系列的計算,能得到一個準確的答案,這個答案就是由已知的數據推導出來的輸出,而算法,就是你的那些計算步驟。
借用Nicklaus Wirth博士的著名公式:程序 = 數據結構 + 算法。
數據結構是指數據之間的邏輯關係,這個在我們上面講數據流時其實就已經描述了這一點,而算法是用來求解特定問題的步驟和方法。
可見算法是相當重要的東西,但其實在ic中,使用算法的地圖並不多,因為大多數作者並不是專業的程序員,而實際上,如果會使用算法來做特殊玩法的作者,基本上都是大佬,因為算法是觸發器的內功,學會再多的函數(招式),也不可能比得過具有深厚內功的。
那麼算法在觸發器裡到底是個啥呢?現在,Konux還是以我的鬥地主觸發器為例子,給你們看看最簡單的一種算法:



1.遍歷原始數據,從第一個數開始,到倒數第二個數結束,比較這個數和下一個數的大小,如果這個數比下一個數大,則交換這兩個數。這樣便可以將數據中最大的數轉移到數組的最後。
2.之後再次遍歷原始數據,但是變為從第一個數開始,到倒數第三個數結束,比較這個數和下一個數的大小,如果這個數比下一個數大,則交換這兩個數。這樣便可以將第二大的數轉移到數組的倒數第二位。
3.重複執行上述過程,一直到從第一個數開始,到第二個數結束,從而完成排序過程。
由於這個循環過程就像泡泡上浮的過程,所以被稱為冒泡排序法。
可能不太好理解,我們接下來用上面的例子來演示整個排序過程。

首先我們把數組造出來,並用一個變量表示數組裡的變量個數



完美排好序了!但是我們剛才說了,如果提前就排好序了,輪次如果還繼續下去就會很蠢,所以我們要用一個變量來控制輪次在排好序後能直接結束

算法的世界是非常神奇的,希望你們能夠加入其中,並享受實現算法的一瞬間帶來的快感!
數據映射:
啥是數據映射?比如現在我們要做一個掃雷,該怎麼入手呢?
你或許最先想到的是先尋找數字、雷、雷爆炸、標旗等素材,並且創建搭載這些素材的單位,用這些單位擺好掃雷的盤面,因為你會想著如果素材都不弄好就去做,最後做出來了成品,想要再去改單位或者素材就會非常麻煩了。
其實產生這種思維很正常,因為大多數人都是“面向單位寫觸發器”,也就是你做一個遊戲,特別依賴於單位,但實際上,我做的掃雷根本不依賴單位運行,我一開始就沒有找素材、擺單位,我直接就開始做掃雷的遊戲邏輯了,那麼這是怎麼做到的呢?這就是通過數據映射的方式,我使用純數學邏輯,構造了一個虛空的掃雷盤面,它只以數字的形式出現,使用觸發器,操控的就是這些數據以進行遊戲,正是因為這些數據是虛空運行,所以外界的環境對它造不成干擾,它一定是絕對正確的,除非是算錯了。
我們來看看如何做數據映射:

還記得二維數組的形狀嗎?二維數組就是天然的矩形數據,所以二維數組就可以作為盤面的數據的載體了!(拿出上一章的圖)

初始數據化完畢之後,我就緊接著開始用這些數據佈雷(不需要看懂):

然後我們可以對這些數據做輸出,看看效果

看看結果:


輸入層、邏輯層、顯示層:
這一部分將是上一個部分的延伸,數據映射是幹了啥?其實它就是遊戲的虛擬主體,遊戲的玩法通過操控數據的方式運行,對數據做數學運算操作的層級叫做邏輯層,而一個特殊玩法,整體也需要封裝為幾個模塊,分別就是輸入層、邏輯層、顯示層,接下來請看層級結構圖。

好了,這就是本章的所有內容,希望看完後,你能對觸發器產生顛覆性的認識,從而以後能更好的駕馭觸發器!
編輯器新手入門交流與討論可加入官方二群,群號:979717879