————————————————————
此章中,你將接觸到IC編輯器中最核心的區域:觸發器,IC的核心是編輯器,而編輯器的核心是觸發器,所以四捨五入來看,觸發器就是IC的靈魂。如果說場景中的單位是地圖的四肢,那麼觸發器就是地圖的大腦,它指揮著單位的運行,這是編輯器最最最厲害的功能,正是觸發器,可以使得IC擁有“2D遊戲微引擎”的美譽,使得IC可以製作平臺跳躍類型遊戲之外的2D遊戲。這是一個令人興奮的東西(同時也令人頭禿),幾乎在所有所謂“高級”的地圖裡,都會有觸發器的影子。
本章知識點如下:
· 觸發器的運行機制
· 觸發器的操作
· 常用事件
· 常用條件
· 單位目標類型
· 數據類型及其轉換
· 高階常用動作解釋
· 函數中的常見陷阱
· bug的檢查與調試
· 觸發器的學習方法
觸發器在哪?
學習觸發器之前,咱們得先會找到觸發器在哪,如下圖所示,位於數據編輯器中


觸發器的認識
觸發器可以被認為是一個寫偽代碼的工具,當然這裡的代碼是中文的自然描述,字面意思比較好理解,不用擔心學不明白(Konux入坑時也是小白哦)。對於遊戲中特定事件,只要寫好具有對應事件的觸發器,若滿足觸發器條件,便有可執行一系列包含在觸發器中設定好的動作。
舉個生草的實際例子:
你在學習的時候,突然肚子一陣搗騰,很明顯你要上廁所了(事件觸發)
這個時候,你可不能直接跑去廁所,你需要先看看自己有沒有帶紙,如果沒帶紙就匆匆跑去廁所是非常危險的(條件判斷)
你發現你帶紙了,於是你拿起手機一路火花帶閃電的就衝進了廁所(動作執行)
觸發器的三大件
事件、條件和動作共同組成觸發器
事件:
只有事件發生,相應觸發器才會被觸發(就像觸發器接收到了信號),若無事件,則不會自行觸發。
條件:
當事件發生時,若條件滿足,才能運行觸發器裡相應的動作,否則不運行動作,就像篩子的作用一樣。
動作:
觸發器觸發後具體要執行的函數組,相信這個你們並不陌生,在坑向教程中我們使用的最多的就是動作。
觸發器的操作:
我們對觸發器的操作類似於關卡,我們可以對觸發器進行新建、克隆(複製粘貼)、刪除、改名、添加類別(用於分類),長按一個觸發器或右擊(電腦端)即可顯示這些操作。


左邊看完了,咱們再看看右邊,也就是觸發器的編輯區域了

這幾個按鈕可以對事件、條件、動作裡的函數做操作。此處注意,事件、條件和動作裡裝的都是函數,但它們屬於不同類別,比如事件裡的函數我們叫它”事件函數”,同理還有”條件函數”和”動作函數”。
實操入門:
OK!現在我們可以開玩編輯器了!
我們遊戲默認的一個觸發器如下,目的是當遊戲開始時,把主機玩家單位(散人)創建出來,這裡沒有寫條件函數,條件中,無條件函數就默認條件是滿足的。



好,經典的第一步,開局輸出一段文本。
首先點擊函數[為所有玩家創建角色],點擊添加函數




製作碰撞傷害技能
什?你沒聽錯,咱們要使用觸發器,模擬製作一個碰撞傷害技能的效果

事件:當玩家碰撞
條件:判斷碰撞了誰
動作:殺死主機玩家單位
由於我們需要的事件不是默認觸發器裡的遊戲開始了,而默認觸發器不允許改事件,所以這時,我們應該新建一個觸發器,實際上,良好的觸發器習慣是一個觸發器只做一種功能,這在我們後期製作邏輯複雜的龐大觸發器時,會有非常多的優點。







第一個參數是設置需要判定的對象的,此處需要選擇玩家碰撞到的單位,那麼這玩意怎麼選擇呢?
一般來說,碰撞事件發生時,雙方單位其中一個是觸發單位(發起方),一個是目標單位(接受方),根據牛頓第三定律,力的作用是相互的,同理碰撞也是相互的,所以一個單位既是觸發單位也是目標單位,但是當其中的一個單位被確定時,另一個單位也就被確定了。比如咱們這個觸發器中,事件為玩家碰撞開始,那麼作為碰撞發起方的玩家,就作為了觸發單位,那麼它碰撞到的單位,就只能是目標單位了!所以咱們條件的第一個參數,就填目標單位即可。



我們把刺的碰撞傷害技能給去掉,然後運行遊戲試試!





大概一個觸發器就是這樣寫出來的,可以看成是拼積木,而此處的積木是由代碼構成的,我們不需要關注代碼上的細節,只需要會把積木拼成大廈就可以了,由於觸發器裡涉及到大量的函數,咱們不可能一一講解用法,但是後文會給出常用的一些函數以及觸發器的學習方法給大家指路。
常用事件:
[[b]遊戲]


遊戲幀數更新:當遊戲每次幀數更新時觸發,時間不穩定,若玩家設備幀數設置為60幀時,則此事件大概每過0.0167秒觸發一次,但是幀數是在不斷上下變化的,所以這個時間也沒有固定值,有意思的是,當遊戲暫停時,此觸發器會繼續觸發,因為遊戲暫停時,幀數是不會暫停的,依據這種特性,我們可以在遊戲暫停時搞些操作。
遊戲物理幀更新:每過固定時間0.02秒會觸發一次,因為物理幀固定為0.02秒。
遊戲暫停、遊戲恢復:顧名思義,當你按下返回鍵時遊戲暫停事件觸發,當由暫停狀態回到遊戲裡時,恢復事件觸發。
[[b]單位]

有同學可能喜歡舉一反三,立刻想到,這個玩家單位事件有啥必要呢?咱們用單位事件也能做呀!如下


我們可以看看單位事件可選的有哪些

初始化:即單位剛被創建時觸發,一個單位在其生命週期內只會觸發一次初始化事件(就像人一生只能出生一次一樣,什?你說你是龍王轉世?那沒事了噢...),不僅僅是用函數創建的單位會觸發初始化,擺放在場景中的單位也同樣會觸發,其實當關卡一開始時,是沒有單位的,你擺在場景中的單位也沒有加載,只有單位加載完後,你的單位才會被創建到場景中,所以在剛進入關卡時,我們擺放的單位才會“出生”,也就會觸發初始化。
交互:需要按[O]鍵的地方就有交互,比如進傳送門、存存檔,這些時候按[O]鍵即可觸發交互。
控制鍵輸入:咱們按[A][D]鍵左右移動,按[O]鍵交互,按[R]鍵重生,按[K]鍵使用道具等,都叫控制鍵輸入,如果改鍵了,也成立,比如將[A][D]改成了[←][→],那麼相應的控制鍵就是[←][→],手機端觸屏按鍵也可同樣觸發控制鍵。和碰撞類似,控制鍵按下時叫輸入開始,持續按住控制鍵時叫輸入中,鬆開控制鍵時叫輸入結束。需要注意的是,控制鍵是位於玩家單位上的,所以如果沒有創建角色,那麼控制鍵將不會被觸發,即使你按了控制鍵。
[[b]關卡]

當進入關卡:當玩家被傳送進入關卡時觸發,遊戲開始時不觸發
當離開關卡:當玩家從該關卡被傳送走時觸發
[[b]計時器]

時間消逝_循環:每過指定的秒數觸發一次,有點像內部計時器的功能
[[b]輸入]

任意按鍵彈起:字面意思,鍵盤上任意按鍵鬆開時觸發
注意,如果是想要玩家左或右移動、使用道具、交互時觸發,不可使用按鍵事件,因為電腦玩家如果改了按鍵,輸入的按鍵將會判定錯誤,應該使用上面講的“玩家單位控制鍵輸入開始”事件,一般來說此事件用於地圖的電腦端操作。
[[b]聊天輸入]


常用條件:
條件函數的返回值為布爾值,它是一種數據類型,數據類型是啥?目前暫且不做解釋,後面講動作時會詳細寫明。布爾值其實你可以認為它只能是0或1兩種值,其中1表示真(True),0表示假(False),對於條件的判斷只有條件成立或者條件不成立,不可能產生一種成立但又不完全成立的條件。布爾值為真時就表示條件成立,為假時表示條件不成立。
現在我們為了方便,引入兩個邏輯運算符(就像+ - * /一樣的東西)來表示條件之間的關係
與運算符:&&
A && B 表示A與B,意思是隻有A和B都為真時,A && B才為真,否則為假
真 && 真 == 真
真 && 假 == 假
假 && 真 == 假
假 && 假 == 假
或運算符:||
A || B 表示A或B,意思是A和B中只要有一個為真,那麼A || B為真,否則為假
真 || 真 == 真
真 || 假 == 真
假 || 真 == 真
假 || 假 == 假
上面的等於號是雙等於“==”,這個用於表示等式兩邊的值是相等的,而如果表示兩邊的值是不等的,就需要用不等於號“!=”,條件等式左右兩邊的值可以互換,並不會影響結果。
那麼單等於號“=”呢?我們稱其為賦值號,賦值號的左邊放需要被賦值的變量(稱為左值),右邊放賦的值(稱為右值),比如a = 1,就表示將1這個值給變量a,那麼a就會被賦值為1,而1 = a這種說法是沒有的,因為1是常量,是個確切的數,不可變,所以我們是無法給常量賦值的。
[表達式]

字面意思,即此函數中包含的所有條件必須都滿足才能成立
可表示為A && B && C && … ,所有條件成立就是“與”運算
任意條件成立:
字面意思,即此函數中包含的所有條件只要任意一個滿足就成立
可表示為A || B || C || … ,任意條件成立就是“或”運算
布爾表達式:
此表達式用於判斷等式兩邊的布爾值是否相等,若相等,則此表達式為真,否則為假,表達式為 A == B,雖然第二個參數“==”可以改為“!=”,但是咱們不需要改變第二個參數,因為“!=真”就是“==假”,“!=假”就是“==真”,我們只需要改第三個參數的真假即可。
此條件函數常用於“條件取反”,比如我們需要判定“當玩家是活著的”,但是咱們只有判斷玩家是死亡的函數,所以我們可以利用表達式寫為“當主機玩家單位是死亡的 == 否”,玩家不是死的,那不就可以表示玩家是活的嗎?

[[b]關卡]

[[b]字符串]

字符串比較即對等式兩邊的字符信息進行比較,若完全相同則為真,否則為假。
字符串包含即判斷一個字符串中是否包含有一個字符串,比如字符串“Konux真帥”中包含“真帥”字符串,不包含“真醜”字符串。
還記得我們在事件中提到的聊天輸入結束函數嗎?咱們可以和此條件配合使用,來做判斷聊天輸入的字符串是什麼,從而完成類似於輸入指令一樣的操作效果。

[[b]數學]

整數比較:判斷兩個整數間的大小關係,可選的關係為“==”、“!=”、“>”、“>=”、“<”、“<=”。

需要注意的一點是,實數之間不能進行“==”或“!=”比較。
因為實數在計算機(手機也一樣)中不能被精確表示,咱們的內存空間是有限的,而有些實數是無限小數,內存中不可能存放這個數字的每一位,所以就會對實數進行舍入,這就會造成舍入誤差,又因為計算機中的數字是以二進制的形式儲存的,所以對於大多數十進制實數來說,轉換為二進制後基本上都是無限循環小數,這個誤差不可忽略。
如果我們需要判斷兩個實數a和b是否相等,就必須要規定一個誤差來判斷,比如Konux習慣用|a - b| < 0.005來判斷兩個實數是否相等,左邊表示a和b的數值差,右邊表示自己規定的精確度。
剩下的四個函數用的非常非常非常少,幾乎沒有什麼作用,所以這裡不講。不過這裡需要提一嘴二維向量比較函數為啥沒用,因為此函數只能進行“==”或“!=”比較,而二維向量就是由兩個實數構成的量,我們知道,實數不能直接比較,所以這個函數也沒有用。如果需要比較兩個二維向量的大小,就需要用實數比較,當二維向量a與b之間的距離 < 0.005時,就表示a和b之間非常接近,就可以認為兩二維向量相等了。
[[b]輸入]







[[b]單位]

是邊界牆:判斷單位是否是邊界牆,邊界牆就是包圍關卡的牆,如下所示,邊界牆分上下左右四塊

單位目標類型比較:我們之前講過單位數據類型比較,單位數據是“圖紙”,單位是圖紙造的零件。而這個目標類型比較是個啥呢?目標類型也是單位的一個屬性,來看:

那麼這個目標類型有什麼用呢?我們先打開玩家子彈的技能看看。









向量在單位內:向量這裡指的就是二維向量,而此處你可以理解為座標,雖然向量和座標不是一個概念,但在編輯器中你仍然可這麼理解它,因為座標就是起點位於原點(0,0)的向量。所以此函數用來判斷一個座標點是否在單位內。

單位在單位內:用於判斷單位和單位是否相交,如下這兩個單位就相交了,這就是單位在單位內。

是水平反轉的:用於判斷一個單位是否是水平反轉的,常常用於判斷玩家,如下,左邊的Kid是初始狀態的方向,右邊的Kid就是水平反轉的,所以檢測玩家的左右朝向時,就可以使用此條件判斷,垂直反轉也是同理。

最後按下的控制鍵比較:用於判斷玩家最後操作了什麼控制鍵,比如玩家使用道具、左移、右移等等操作,由於此條件是判斷最後按下的控制鍵,而我們前面講最後創建的單位時講過,“最後單位”的獲取是不能加等待的,否則就可能出現問題,這裡也同理,最後按下的控制鍵一定是即時即用的,所以也要搭配控制鍵事件使用,如下:

數據類型及其轉換:
太好了!終於進入到了數據類型的教學,這裡可能會涉及到一點點編程方面的知識,當然這些東西是幫助你理解,而並非需要去掌握的,所以如果看不懂也可以接著看下去,直接看結論就可,接下來咱們先從最基礎的數據類型開始講解。
眾所周知,任意一款軟件,都是以二進制(滿2進1,十進制是滿10進1)的形式跑在機器上的,遊戲裡的數據,在底層裡也是被翻譯成了二進制的0和1,比如整數,在內存中是以二進制形式儲存的,整數8,二進制就是1000,整數5,就是0101,由於我們的數據存在內存中,每個數據會給定一個空間用來存放,所以這就造成了數據空間是有限的,就像一個房子空間有限一樣,裡面能容納的人也是有限的,所以數值型數據會有一個範圍,並不是可以無限大的,下面介紹幾種數值數據類型。
整數(int):
整數就是-1、0、1、2這種數,相信在座的各位大聰明應該在上輩子就學過了,在我們的編輯器中,整數在內存中佔用4*8 = 32個比特(bit)位,啥是bit?其實就是二進制位的意思,就像十進制裡114514是6位數一樣,bit用來表示二進制的位數,32個bit位就像下面這樣:
00000000 00000000 00000000 00000000
表示十進制的1023,二進制可寫為:
00000000 00000000 00000011 11111111
所以什麼情況下,此二進制值最大呢?就像固定三位數空間內999是最大值一樣,在二進制整數中,最大的數字就是全1:
01111111 11111111 11111111 11111111
咦?為啥左邊第一位是0?因為這裡的整數分正負,而最左邊第一位我們稱為符號位,為0時表示正數,為1時表示負數,它只表示值的正負,不表示數值大小,所以整數最小值就是:
11111111 11111111 11111111 11111111
可能這樣不太直觀,我們將這個最小值和最大值換成十進制:
整數範圍為-2^31 到 (2^31)-1,其中31次方就是因為數值位是32-1位,計算一下這個數值就是-2147483648到2147483647,如果整數超出這個範圍,就叫做數值溢出。那麼數值溢出會咋樣呢?如下圖所示,其實整數數值結構是個圓,沿著逆時針方向增大。

0 + 1 = 1
1 + 1 = 2
…
2147483647 + 1 = -2147483648(數值溢出)
-2147483648 + 1 = -2147483647
…
-1 + 1 = 0
好了接下來做個總結:
1.整數的值的範圍是-2147483648到2147483647
2.在寫觸發器時要儘量避免超出整數範圍,否則會造成數值溢出。
實數(float):
實數就是小數,有小數點的那種,比如3.1415926就是個實數,實數可以直接表示,也可以使用E記法(科學計數法)表示,比如實數114500000.0等於1.145*10^8,那麼其E記法表示為1.145E+8,這裡的E就是代表以10為底,+8表示10的指數,1.145為小數部分,注意E記法不能出現空格!
下面給出一些E記法在編輯器中的正確例子:
0.123e3 == 1.23E+2 == 123.0
0.123e-3 == 1.23E-2 == 0.000123
.123e3 == 1.23E+2 == 123
10.123e3 == 1.0123E+4 == 10123
當然了,實數也有它的範圍,由於解釋起來不容易理解,所以就不給推導過程了,對實數類型的內存結構有興趣的同學可以自行搜索:float 結構。
實數的取值範圍如下:
[-3.4028235E+38, 3.4028235E+38]
更精確的範圍應該是:±340282346638528859811704183484516925440之間
實數的儲存大小也是4*8 = 32bit,雖然和整數佔用的空間一樣,但是實數的儲存結構比整數的要複雜,它們是完全不同的,你會發現雖然實數佔用的空間和整數相同,卻能表示比整數多得多的值,這不科學,同一房間裡怎麼會因為裝人的方式不同而容納更多的人呢?根據信息論來說,實數能表示這麼大範圍的數值,那麼一定是捨棄了什麼,這裡Konux告訴你,其實是捨棄了精度,各位想想,不就是裝人嗎?這人的胳膊、腿、肚子等等咱都不要了,就剩個頭來表示人,這樣有限的空間裝的人就會變多(這個比喻好像挺精汙)。這下知道為啥實數不能直接“==”比較了吧,因為實數是“殘缺不全”的,或者是不精確的!
好了接下來做總結:
1.實數可以直接表示,也可以用E記法表示
2.實數的取值範圍是:[-3.4028235E+38, 3.4028235E+38]。
3.實數並不精確。
4.實數的精度能保證至少6-7位有效數字是準確的。
5.若實數超出範圍,則會顯示±Infinity(無窮),所以應控制實數不超此範圍
字符串(string):
在介紹字符串之前,我們先介紹一下字符(char):字符指類字形單位或符號,包括字母、數字、運算符號、標點符號和其他符號,以及一些功能性符號(這是百度上粘貼下來的)。
這啥?真是不講人話!通俗一點,像‘a’、‘5’、‘我’、‘%’、‘ ’(這是空格) 、‘+’等等就叫字符,字符是單個的,而且需要打上單引號,比如‘5’是字符,而5是數字,這兩個是不同的數據類型。
認識完字符,那麼字符串也就好說了,就是把字符連成一串嘛,我們這個教程中說的每個句子,都是字符串,比如“這個教程真棒! 學廢了學廢了(”就是一個字符串,字符串需要用雙引號表示。
如果我們需要獲取字符串中的某個字符該怎麼辦呢?
其實啊,字符串就像字符排成的長隊一樣,字符都是有下標的,下標是啥?簡單來說就是咱們去某些飯店裡拿的排號,我們是第幾號,就表示我們是第幾個吃,字符串裡的字符手裡拿的號碼就是它們的下標:

布爾(bool):
布爾數據類型應該大家已經不陌生了,條件判斷函數的輸出類型就是布爾,布爾只有兩種值:True或False,編輯器中中文化為真和假,布爾類型用於判斷一個條件是成立的還是不成立的,如果成立,則為真(True),如果不成立則為假(False)。
二維向量(Vector2):
因為咱們遊戲是2D的,三維向量幾乎用不到,所以以後說到向量一般就是指二維向量。
二維向量,又稱平面向量,平面向量是在二維平面內既有方向又有大小的量,物理學中也稱作矢量,比如力就是個矢量,應該初二物理就學過了。


就是勾股定理,當然這種方式不太直觀,另一種直觀的說法是,向量的大小的值等於向量的長度(雖然這個說法並不科學)。看起來有點麻煩,是嗎?但好消息是,編輯器中的向量的起點都位於座標原點(0,0),所以用向量的終點(x,y)就可以表示一個向量,所以正好向量的值就等於座標的值:

向量之間的角度:座標之間的角度
向量之間的距離:座標之間的距離
向量計算:座標計算
比如向量(a, b) ± (c, d) == (a±c, b±d)
向量網格化:座標網格化
將座標“吸附”到規則的0.64網格座標上

當然了,數據類型遠遠不止上面這幾個,找到全局變量函數,就可以找到所有的數據類型了。

數值數據類型之間的轉化:
數值數據類型之間為啥要轉化呢?其實就像多頭充電線一樣,函數的參數只接收一種數據類型的數據,不同的函數的參數能接收的數據類型是不同的,所以原始的數據類型只有經過轉換之後才能用。



整數轉化為實數:
此轉換很簡單,比如整數9,轉化為實數就是9.0。
實數轉化為整數:
實數轉化為整數有點東西,比如實數9.0轉化為整數就是9,如果8.9轉化為整數呢?其實會轉換為8,實數轉換為整數時,整數只取實數的整數位,不關心小數位,不是四捨五入,四捨五入有另外相關的函數,比如-3.99,取整之後為-3,我們稱此種取整方式為“向零取整”,實數取整符為[],比如[-3.99] == -3。
布爾轉化為字符串:
布爾的值為True或False,所以轉換為字符串之後就是“True”和“False”,不是“真”和“假”哦,真和假只是編輯器中文化過的。
整數轉化為字符串:
很簡單,比如整數10,轉化為字符串後就是“10”,包含‘1’和‘0’兩個字符,下標從左到右依次為0和1。
實數轉化為字符串:
和整數轉化為字符串類似,比如實數3.1415,轉化為字符串之後就是“3.1415”,這是一個含有6個字符的字符串。
二維向量轉化為字符串:
二維向量一般表示為(x,y),所以字符串也是這樣表示的,比如向量(0.64,1.28),轉化為字符串後就是“(0.64,1.28)”,11個字符的字符串。
高階常用動作:
變量:
經過上面對於數據類型的“薰陶”,你應該能懂,變量可以指代某個數據類型的某個數據,變量分為兩個部分,變量類型和變量名,變量類型用來表示變量裡存放的數據類型,變量名則是變量的“外號”,方便我們以後要用這個變量時,可以叫它。變量名中可以寫英文、中文、日文、數字字符、各種符號,不過為了變量名字的可讀性,建議使用純英文寫法,若不會英文,可使用純中文寫法,比如咱們要設置一個實數變量表示最小時間,英文可寫為minTime,這裡的變量命名採用的是“小駝峰”法,即第一個單詞開頭小寫,後面的單詞開頭大寫,如果用純中文,命名為“最小時間”也可以。

對於變量的學習,可以看官方文檔教程:
https://easydoc.net/s/85829661/USXlrH6u/N2QX5DlZ

咱們這裡做一下補充,由於之前一直講的是全局變量,所以就不講了。
單位變量:

要獲取單位變量的值,就需要點擊變量,找到[從單位變量中獲取]函數,填入需要獲取的單位,然後填入對應單位上的單位變量名即可。

數組:




二維數組:


二維數組下標表示為arr[j],其中arr是數組名,表示數組的橫向下標,[j]表示數組的縱向下標。所以比如圖中整數10可以表示為arr[0][0],47表示為arr[3][1]。一維數組是線性結構,所以用一個下標就可以表示它裡面的每個變量,二維數組是平面結構,所以需要兩個下標確定一個變量。
註釋:


For和while循環:

for循環在官方文檔教程裡有我寫的非常詳細的介紹:
https://easydoc.net/s/85829661/USXlrH6u/g6uPc2oo
這裡就不詳細講解了,for循環主要應用於要循環做一部分函數組時使用。
比如我們上面的定義數組var的函數就明顯都是相同的步驟:



單位組:


在使用單位組之前,我們需要先創建一個單位組,並用一個變量表示它:

Ok,既然我們創建了單位組,那麼就要想給它加單位進去了:

接著,我們get到了想要的單位進入單位組後,就需要對這裡面的單位進行操作了:

需要注意,不能在“選取單位組內所有單位做動作”函數中的動作裡使用等待或計時器等具有延時的函數,否則會出bug,如果需要等待,那麼請將延時放外邊寫:



遊戲:

設置遊戲時間:此函數可設置遊戲的真實時間,通關時的時間就是真實時間,遊戲左上角的時間是資源時間,僅用於顯示。
增加遊戲時間:在當前真實時間基礎上,加上指定時間,注意,若此處填負數,那麼表示減少時間,即time + (-t) == time – t。
設置世界重力:世界的默認重力是(0,-14.5),表示x方向無加速度,y方向有向下為14.5的重力加速度,這是世界的真實重力,而單位實際所受的重力是(重力縮放*重力),重力縮放為1時就表示正常重力。
停止計時/恢復計時:字面意思,停止遊戲時間或恢復遊戲時間
暫停遊戲/恢復遊戲:字面意思,暫停遊戲時,大部分觸發器將無法觸發執行,單位都會被暫停,恢復遊戲時,會解除暫停遊戲造成的效果。
設置遊戲速度:可改變遊戲的速度,遊戲的實際時間也會跟隨遊戲速度變化,相當於變速。
勝利/失敗:使遊戲勝利或失敗,勝利函數可代替出口單位,常用於特殊玩法。
漂浮文字:

https://easydoc.net/s/85829661/USXlrH6u/2JmpjztG
同樣的,由於漂浮文字被創建後,只能通過最後創建的漂浮文字獲取,所以我們的好習慣就是用變量給漂浮文字取別名,好讓我們以後使用:

觸發器:



運行觸發器:指定一個觸發器並運行它,相當於忽略掉該觸發器的事件,直接觸發該觸發器,當然運行觸發器也是要判斷條件的,如果條件滿足,才會運行觸發器內的動作。
運行觸發器(無視條件):和上面類似,只是這條函數可以直接運行某個觸發器裡的動作,連條件都管不著
開啟/關閉觸發器:這是用函數的方式控制觸發器的開關,我們之前學過手動方法:

虛擬按鍵:


隱藏全部:隱藏全部的虛擬按鍵
顯示:顯示指定的單個虛擬按鍵
隱藏:隱藏指定的單個虛擬按鍵
需要注意,單個顯示只能和單個隱藏對應,全部顯示只能和全部隱藏對應,若全部隱藏了按鍵,則不能單個顯示,只能全部顯示。
需要注意一點,對虛擬按鍵進行操作時,不要在遊戲剛開始時做,因為遊戲剛開始時,虛擬按鍵還沒被加載,需要等至少1幀才能設置:


函數中的常見陷阱
此模塊會列舉一些觸發器中容易被坑的點,幫助新人避坑
1.變量不要輕易套娃,除非你技術夠好,以下是錯誤示範:

2.for循環或while循環是在1幀內運行的,所以不要在其中加等待或計時器
3.能不使用局部變量就不使用
4.變量是有類型的,千萬不要將變量用到不屬於它的類型的參數上,如下錯誤示範:

5.記好你的變量名字,如果使用變量的時候不小心寫錯了(包括大小寫),這種情況不會報錯,所以你的地圖因為這個變量寫錯名字而出了bug會非常難排查。
6.計時器、觸發器裡不得使用自身單位

7.設置單位的有關物理的屬性時,不要在單位初始化時設置,因為此時單位還沒有加載物理屬性;或者在關卡/地圖初始化時,不要立即用單位組獲取單位,因為單位也沒有加載出來。所以如果你發現你的觸發器裡的動作沒有執行或出現問題,不妨在動作前加個等待0.0幾秒試試,等待是個好東西,能治很多病(
8.註釋是個好東西,在寫較大觸發器的地圖時,一定要用,不然你可能會後悔的
9.字符串如果是不存在的,那麼漂浮文字顯示出來會是Aikesi,千萬不要看到這個Aikesi就以為是遊戲作者埋的彩蛋,這隻能說明你寫的字符串出了問題。
Bug的檢查與調試
寫觸發器出bug是常態,這也是新手的必經之路,修bug修多了,才能成為高手!
1.如果遇見了bug,首先看信息面板有沒有報錯(爆紅字),如果爆了,那麼萬事大吉,這種bug是最好修的,因為往往信息面板會告訴你哪錯了。
2.信息面板爆紅後,往往觸發器有些函數會被標紅,這可能就是錯誤的地方,如果自行無法解決,可在遊戲群內詢問大佬們。
3.若信息面板沒有爆紅,但是運行的結果不對,這可能就是隱性bug,這種bug是不好修的,因為你不知道問題出在哪,但是你可以根據你寫的觸發器縮小範圍,逐個排查,如果不知道某一步會輸出什麼東西,信息面板就派上用場了,你可以將你的函數運行過後的數據,顯示到信息面板上,來判斷結果是否是你想要的。


4.若複雜的邏輯問題出現了bug,請不要求助大佬,因為即使是他們,也不可能懂你的邏輯是什麼,大佬只能糾正你簡單的一些技術上的bug,只有你自己最清楚你的邏輯,所以請自行耐心排查bug,誰也幫不了你。
5.若是遇見閃退bug或卡死bug,請檢查你的觸發器是否運行了自己造成了死循環、是否是for循環是死循環、是否是變量類型匹配錯誤等。
觸發器學習方法
觸發器的學習從來都不是看幾個教程就能學會的,即使教程再詳細,也需要你多實踐才能有效,觸發器裡的函數可以通過看教程或問大佬解決,但是觸發器的思想,只能通過在實踐中悟到,所以如果想學好觸發器,請多做觸發器圖,多獨自解決bug,多獨自思考,在實踐中,觸發器使用的感覺會逐漸形成,Konux用了三年編輯器,現在明顯的感覺就是能明確的知道什麼東西能做,什麼東西做不成,什麼東西該用什麼觸發器做,這些都形成了一種本能,就像把觸發器完全握在手中把玩的感覺。
當初Konux入坑時,還沒有所謂的教程,此遊戲編輯器的教程非常稀少,所以當初是一步一步踩坑踩出來的,現在,教程幾乎滿天飛,大佬遍地走,資源非常豐富,學習的過程中,可尋求的資源有:本教程、官方文檔教程、b站一些up的教程、群內觸發器大佬,所以希望能看到此處的你,把握好現在的機會。
編輯器新手入門交流與討論可加入官方二群,群號:979717879
[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]