IC編輯器_從入門到精通_第六章|我想成為創造者


3樓貓 發佈時間:2022-02-26 18:08:41 作者:Konux Language

第六章:特殊玩法思想
————————————————————

如果你是個新手,現在講一些複雜的觸發器,基本上你會看不懂,所以咱們這章主要講思想,這種抽象的東西可能會改變你未來的觸發器風格,魯迅曾經說過:“觸發器要從娃娃抓起”,觸發器風格一旦形成,在後天將難以改變,所以此章將帶領各位新手走到正確的方向上,這對於你們以後的發展是大有裨益的。

 
觸發器技術分為兩個大類,一個是函數的運用,一個是算法與數據結構。前者是形,後者是神,只有形神兼備,才能打造頂級的觸發器。形,即外在,這裡指函數的運用,這是新手期作者主要的研究內容,只有熟悉各種函數的使用,才能在這個架子上搭載我們的“神”,即內在,它看不見,但是卻是打破觸發器瓶頸的那把唯一的錘子,就像內功一樣,雖然無形,但卻有質,這種東西需要在不斷的作圖中形成,而本教程將直接將這些知識灌輸給你,希望你可以從中獲得一點點啟發。
 
本章講的特殊玩法,是比較廣義的,包含Boss、耐久和純特殊玩法等等需要使用大量觸發器的地圖,關於Boss製作的教程,網上也有不少,我們這裡就不做講解了。
這裡給出官方文檔的Boss教程:
https://easydoc.net/s/85829661/USXlrH6u/jomA211r
 
好了,接下來看看本章咱們的知識點:
· 觸發器的數據流
· 封裝思想
· 數學
· 算法
· 數據映射
· 輸入層、邏輯層、顯示層
 
觸發器的數據流
在研究數據流之前,我們先思考一下觸發器的本質是什麼,它有事件、有條件、有動作,綜合來看,它是一種在指定時機下能自動執行的腳本(也就是動作)。事件和條件選擇符合的時機,動作提供操作,所以觸發器的數據運行全在動作中,這裡的數據,指的是咱們上一章講過的所有數據類型。
IC編輯器_從入門到精通_第六章|我想成為創造者 - 第1張你會發現其實動作裡寫的函數,大多都是對數據進行操作,比如單位、漂浮文字、字符串、整數、二維向量等等,觸發器的動作裡可以創建數據、修改數據、查找數據以及刪除數據,而不同觸發器之間可能也因為處理相同的數據而造成關聯性,而從數據本身的角度來看,它被多個觸發器控制,所以就肯定會在觸發器之間來回流動,這就是觸發器的數據流。
IC編輯器_從入門到精通_第六章|我想成為創造者 - 第2張以上是新手製作觸發器的數據流,其中紅線表示數據之間存在關聯,很顯然,這些數據的流動非常的複雜,只要改動其中的一個數據,就可能牽一髮而動全身,這種數據流結構非常難以控制,而且也極易出現bug,所以我們的觸發器一定要“高內聚、低耦合”,意思是數據在單個觸發器內部集成流動,觸發器之間的數據交流要儘量的少,下面我們來看看“高內聚、低耦合”的數據流是啥樣子的。
IC編輯器_從入門到精通_第六章|我想成為創造者 - 第3張觸發器之間的數據流動很少,但是觸發器內的動作裡的數據交流頻繁,這樣的流結構有助於提高觸發器運行的穩定性,也更容易排查bug。
 
封裝思想:
前面提到的“高內聚”實際上就是封裝思想了,也就是將觸發器當做一個盒子,把動作裝進去,讓數據流在其中流動,而這個盒子對外只有輸入接口和輸出接口,這種對觸發器進行封裝的思想,在特殊玩法中尤其重要。
IC編輯器_從入門到精通_第六章|我想成為創造者 - 第4張上圖就是一個封裝結構,其中的接口實際上就是全局變量,因為全局變量在各個觸發器中都能獲取和改變,所以全局變量在觸發器中充當著重要的角色,是觸發器之間交流的橋樑。當然了,以這種結構思想來寫觸發器,就必須將觸發器分塊寫,爭取一個觸發器只幹一件事,這種方法可以讓你的觸發器看起來更多一點(???才不是),這樣寫的觸發器結構層次清晰,bug的可能性會減小,如果出現了bug,由於觸發器之間的低耦合性,所以在找bug時會很方便。

 
但是!由於觸發器和編程不同,編程上可以很好的應用這套標準,而觸發器畢竟是不同於編程的,所以比如一些無需對外做信息交流的觸發器則不需要輸出,當然輸入一般得有。而且更妙的是,多個觸發器可以共同封裝,封裝也可以嵌套(套娃),如下圖所示:
IC編輯器_從入門到精通_第六章|我想成為創造者 - 第5張觸發器的封裝更需要靈活運用,有的時候不需要封裝,有的時候就必須要用,這種能判斷該如何封裝觸發器的思想只能通過實戰來獲得,根據應用場景的不同,選擇也不同。
 
以下舉例封裝形式的觸發器:
初始化時定義一個整數作為輸入:
IC編輯器_從入門到精通_第六章|我想成為創造者 - 第6張當事件觸發,則接收輸入,並執行操作,最後運行下一個觸發器,將輸出傳遞過去:
IC編輯器_從入門到精通_第六章|我想成為創造者 - 第7張“觸發器1”被執行,接收上一個觸發器的輸出,並當做自己的輸入,經過處理後,輸出最終結果:
IC編輯器_從入門到精通_第六章|我想成為創造者 - 第8張這裡封裝了兩個觸發器,當然了,咱們的例子是沒有什麼實際意義的,只是想通過這種方式來展示結構,實際應用中的封裝會複雜的多。
 
數學:
計算機為啥叫計算機?顧名思義,它能做的事就是計算,它乾的最主要的事也就是對數字進行加減乘除(CPU)和存取(ROM/RAM),任意的程序或應用軟件,都是基於數學的,一個程序,實際上本質就是對數字做運算,所以說,觸發器也是如此,玩觸發器到達比較高的層次後,基本上都是在玩數學。
千萬不要覺得數學是枯燥的,因為你可能只是受到了9年義務教育的鞭撻,“享受”著數學課本里那些複雜的公式以及晦澀難懂的專業性語句(簡稱:不說人話)的薰陶,而這只是應試教育氾濫的結果。實際上,數學是非常美妙的,美的有時候你都不知道為什麼會這麼巧,有些公式雖然難以記憶,但是公式之間竟然有著出奇的一致性,即使它們的推導過程並不相同。生活在互聯網時代,或者說是數字化時代,數學,是每個人都應該瞭解的一門“必修課”,如果你有幸在未來成為了觸發器大佬,你也一定會感受到數學的強大魅力,因為強大的觸發器,往往需要一些數學知識,你在以前學習的數學知識,可能真的可以在編輯器中得到應用,而不是僅僅被考試所踐踏!
使用數學最多的玩法是耐久,耐久中的各種花式彈幕,其實就是一個個的數學函數描繪的。
比如愛心曲線的參數方程(其中,t為從0到2π):
IC編輯器_從入門到精通_第六章|我想成為創造者 - 第9張IC編輯器_從入門到精通_第六章|我想成為創造者 - 第10張應用到遊戲中(其實就是將子彈(玩家)單位創建在數學函數所對應的座標上):
IC編輯器_從入門到精通_第六章|我想成為創造者 - 第11張Look!數學是多麼美妙的東西啊!接著看看其他的數學函數表現出的樣子:
IC編輯器_從入門到精通_第六章|我想成為創造者 - 第12張IC編輯器_從入門到精通_第六章|我想成為創造者 - 第13張IC編輯器_從入門到精通_第六章|我想成為創造者 - 第14張IC編輯器_從入門到精通_第六章|我想成為創造者 - 第15張當然了,數學函數還遠遠不止有上面的這些,耐久的製作,其實更像是一場數學盛宴,每一個彈幕都經過精密的數學計算,在其出生的那一刻,就被規劃好了移動的路徑、速度以及各種形態變化。
 
算法:
算法,即計算方法,常用於純特殊玩法中,當然算法一聽名字就知道又是和數學相關,算法的百度解釋是:解題方案的準確而完整的描述。這又是什麼不當人的話??簡單來說,算法就是根據一定的輸入,經過一系列的計算流程,得到最終的輸出結果,其實就跟解數學題目類似,題中給出已知條件,我們通過一系列的計算,能得到一個準確的答案,這個答案就是由已知的數據推導出來的輸出,而算法,就是你的那些計算步驟。
借用Nicklaus Wirth博士的著名公式:程序 = 數據結構 + 算法。
數據結構是指數據之間的邏輯關係,這個在我們上面講數據流時其實就已經描述了這一點,而算法是用來求解特定問題的步驟和方法。
可見算法是相當重要的東西,但其實在ic中,使用算法的地圖並不多,因為大多數作者並不是專業的程序員,而實際上,如果會使用算法來做特殊玩法的作者,基本上都是大佬,因為算法是觸發器的內功,學會再多的函數(招式),也不可能比得過具有深厚內功的。
那麼算法在觸發器裡到底是個啥呢?現在,Konux還是以我的鬥地主觸發器為例子,給你們看看最簡單的一種算法:
IC編輯器_從入門到精通_第六章|我想成為創造者 - 第16張這個觸發器實際上做的就是把牌給排好序(這裡有變量套娃,因為我把握的住,新手千萬別學),其實這個問題的本質就是將一個含有很多個整數的數組根據從小到大的順序排好,就像下面這樣:
IC編輯器_從入門到精通_第六章|我想成為創造者 - 第17張排好序之後,要求變成這樣
IC編輯器_從入門到精通_第六章|我想成為創造者 - 第18張將數組裡的數字排好序,就是最簡單的算法問題,在這個觸發器中,使用的是冒泡排序(BubbleSort)算法,所以在這裡介紹一下這種算法:
 
1.遍歷原始數據,從第一個數開始,到倒數第二個數結束,比較這個數和下一個數的大小,如果這個數比下一個數大,則交換這兩個數。這樣便可以將數據中最大的數轉移到數組的最後。
 
2.之後再次遍歷原始數據,但是變為從第一個數開始,到倒數第三個數結束,比較這個數和下一個數的大小,如果這個數比下一個數大,則交換這兩個數。這樣便可以將第二大的數轉移到數組的倒數第二位。
3.重複執行上述過程,一直到從第一個數開始,到第二個數結束,從而完成排序過程。
由於這個循環過程就像泡泡上浮的過程,所以被稱為冒泡排序法。
 
可能不太好理解,我們接下來用上面的例子來演示整個排序過程。
IC編輯器_從入門到精通_第六章|我想成為創造者 - 第19張當然了,由於我們這裡的例子不是那麼亂,所以排序到第二輪的時候就已經排好了,上面是為了描述完整的冒泡排序過程,所以繼續將接下來的輪次都畫出來了,實際上我們可以通過一個變量來檢測排序是否完成,然後提前終止掉循環,下面給出觸發器:
首先我們把數組造出來,並用一個變量表示數組裡的變量個數
IC編輯器_從入門到精通_第六章|我想成為創造者 - 第20張然後我們開始寫一個簡單的BubbleSort
IC編輯器_從入門到精通_第六章|我想成為創造者 - 第21張OK!寫完了,我們在底下寫個for循環把這個數組打印出來看看:
IC編輯器_從入門到精通_第六章|我想成為創造者 - 第22張
完美排好序了!但是我們剛才說了,如果提前就排好序了,輪次如果還繼續下去就會很蠢,所以我們要用一個變量來控制輪次在排好序後能直接結束
IC編輯器_從入門到精通_第六章|我想成為創造者 - 第23張OK!這就是一個完整的冒泡排序算法,這也是最基礎的交換排序算法,在編程中排序算法有很多,比如選擇排序、插入排序、希爾排序、歸併排序、快速排序、堆排序、桶排序、計數排序、基數排序,加上我們的冒泡排序共同組成十大排序算法,如果大家感興趣,可以自行學習相關算法。排序算法只是簡單的算法,在IC中,有不少觸發器大佬做出了隨機迷宮(Prim)算法、自動尋路算法(基於A-star)、五子棋人機算法、鬥地主牌型識別算法、RSA加密解密算法等等(啊,沒錯,我都有寫過)!

算法的世界是非常神奇的,希望你們能夠加入其中,並享受實現算法的一瞬間帶來的快感!
 
數據映射:
啥是數據映射?比如現在我們要做一個掃雷,該怎麼入手呢?
你或許最先想到的是先尋找數字、雷、雷爆炸、標旗等素材,並且創建搭載這些素材的單位,用這些單位擺好掃雷的盤面,因為你會想著如果素材都不弄好就去做,最後做出來了成品,想要再去改單位或者素材就會非常麻煩了。
其實產生這種思維很正常,因為大多數人都是“面向單位寫觸發器”,也就是你做一個遊戲,特別依賴於單位,但實際上,我做的掃雷根本不依賴單位運行,我一開始就沒有找素材、擺單位,我直接就開始做掃雷的遊戲邏輯了,那麼這是怎麼做到的呢?這就是通過數據映射的方式,我使用純數學邏輯,構造了一個虛空的掃雷盤面,它只以數字的形式出現,使用觸發器,操控的就是這些數據以進行遊戲,正是因為這些數據是虛空運行,所以外界的環境對它造不成干擾,它一定是絕對正確的,除非是算錯了。
我們來看看如何做數據映射:
IC編輯器_從入門到精通_第六章|我想成為創造者 - 第24張如上,我首先定義了掃雷的盤面大小(15指盤面為15*15)和這個盤面的左上角座標,定義這兩個量的好處是,即使我們做完了掃雷,也可以很方便的通過改這兩個變量的值來調整掃雷的盤面大小和位置,可以讓掃雷放在自己想放的任何位置。
還記得二維數組的形狀嗎?二維數組就是天然的矩形數據,所以二維數組就可以作為盤面的數據的載體了!(拿出上一章的圖)
IC編輯器_從入門到精通_第六章|我想成為創造者 - 第25張接著我就用兩層for循環開始做盤面了,先是設置了名為“雷”的整數二維數組,此數組中,值為0表示無雷,為1表示有雷,但是我們這是在初始化盤面,所以先全設置為0,也就是不放雷;接著我們設置了一個名為“數”的整數二維數組,這個數組是用來記錄每一個格子上的數字的,其實就這兩個二維數組,就已經完成了數據映射,將盤面數字化為了二維數組,這樣我們就只需要對二維數組做操作即可完成遊戲的運行,但是數據需要載體來呈現,所以我接著造了單位作為盤面的顯示,這些單位我使用數學計算出了每一個單位的相應座標,當然,我們也用一個二維數組將這些單位給獲取了,這樣,這些單位也被數據化了,我們以後不會對單位進行直接操作,只需要對二維數組做操作即可。
初始數據化完畢之後,我就緊接著開始用這些數據佈雷(不需要看懂):
IC編輯器_從入門到精通_第六章|我想成為創造者 - 第26張可以看到,我使用的函數全是數學或變量,根本沒有使用單位。
然後我們可以對這些數據做輸出,看看效果
IC編輯器_從入門到精通_第六章|我想成為創造者 - 第27張也沒有單位,只有數學和漂浮文字(用於顯示)
看看結果:
IC編輯器_從入門到精通_第六章|我想成為創造者 - 第28張是不是非常酷炫呢?我們的場景上並沒有擺放任何單位,全是觸發器製作的:
IC編輯器_從入門到精通_第六章|我想成為創造者 - 第29張好了,數據映射就講到這裡,希望你們在做純特殊玩法的時候,思維一定要打開,在觸發器的世界裡,你就是上帝,將遊戲的數據數字化,將會使你的觸發器高級很多!
 
輸入層、邏輯層、顯示層:
這一部分將是上一個部分的延伸,數據映射是幹了啥?其實它就是遊戲的虛擬主體,遊戲的玩法通過操控數據的方式運行,對數據做數學運算操作的層級叫做邏輯層,而一個特殊玩法,整體也需要封裝為幾個模塊,分別就是輸入層、邏輯層、顯示層,接下來請看層級結構圖。
IC編輯器_從入門到精通_第六章|我想成為創造者 - 第30張輸入層用來接收玩家的操作(遊戲運行取決於玩家的操作),邏輯層負責將玩家的操作對應的數據做邏輯運算處理,當處理完畢之後,將邏輯結果輸出到單位上(或圖片、文字),這就是顯示層,顯示層的單位只充當顯示圖片的作用,並不需要用到單位的功能。特殊玩法的這種結構,將會大大的提高你觸發器的穩定性和層次性,使觸發器能盡然有序的進行。
 
好了,這就是本章的所有內容,希望看完後,你能對觸發器產生顛覆性的認識,從而以後能更好的駕馭觸發器!
 
編輯器新手入門交流與討論可加入官方二群,群號:979717879


© 2022 3樓貓 下載APP 站點地圖 廣告合作:asmrly666@gmail.com