第二節(jié) 走進(jìn)觸發(fā)器之「奏樂」特技的實(shí)現(xiàn)(二)

這一小節(jié),我們用觸發(fā)器來自己實(shí)現(xiàn)一個(gè)「奏樂」特技。
開始本節(jié)前,我們簡單回顧下流程圖。

這是一個(gè)簡易流程圖。
①輸入i
②令i = 0
③判斷i<9結(jié)果
④若③為假,進(jìn)入到⑦;為真進(jìn)入到⑤
⑤輸出i
⑥令i + 1,回到③
⑦結(jié)束
流程圖包含了編程思想里最主要的幾個(gè)概念:if(條件真假),for(循環(huán)),i = 0(賦值),i+1(自增)
這也是我們今天要用到的幾個(gè)概念。
先貼完整代碼
(可直接復(fù)制代碼運(yùn)行)
看下效果

接下來是代碼講解。
奏樂的特技描述是己方部隊(duì)每回合回復(fù)氣力5點(diǎn)。
我們上一小節(jié)分析了,其中每回合是觸發(fā)器,已方部隊(duì)是目標(biāo),回復(fù)氣力5點(diǎn)是行為。
我們對(duì)照這個(gè)分析找到對(duì)應(yīng)的函數(shù)。
通過查文檔我們知道111觸發(fā)器,代表回合開始時(shí)。

我們發(fā)現(xiàn)這個(gè)觸發(fā)器的括號(hào)里還有內(nèi)容,這個(gè)叫做回調(diào)參數(shù)。是這個(gè)觸發(fā)器觸發(fā)的時(shí)候,給我們的一些額外信息。
比如這里的是pk::force@ force。這個(gè)表示勢力,也就是游戲里顯示的xx軍,如劉備軍,曹操軍。
我們知道,游戲里是每個(gè)勢力輪流執(zhí)行1個(gè)回合,所以這里的force是表示這個(gè)回合是輪到哪個(gè)勢力。
List是指一類同樣類型數(shù)據(jù)的特殊類型。

如上圖,List類型內(nèi)是Person類型的集合。
List是游戲里常用的數(shù)據(jù)類型,勢力列表,部隊(duì)列表,武將列表等等都是List類型,對(duì)應(yīng)的也有Array(數(shù)組類型),用法跟List一致。
pk::get_unit_list(force) 是游戲內(nèi)置函數(shù)之一,用來獲取指定勢力的部隊(duì)列表。
所以整句的意思是

這是for循環(huán)。我們需要獲取到的部隊(duì)列表里的每一個(gè)部隊(duì)進(jìn)行指定的處理。
其中unit_list.count代表list的數(shù)量;
i 代表序號(hào),從0開始算起。0代表第0個(gè),1代表第1個(gè)......
i += 1 是i加1 后再賦值給i;
從List里取出unit(部隊(duì))
ch是制作組寫的通用方法,可以在302 全局函數(shù).cpp 查閱,涉及了大多數(shù)常規(guī)處理。
其中has_skill用來判斷部隊(duì)是否有xx特技,有的話返回true。
add_energy 是給指定部隊(duì)增加氣力。
第一個(gè)參數(shù)是指定部隊(duì);
第二個(gè)參數(shù)是變化的值,正數(shù)則增加,負(fù)數(shù)則減少。
第三個(gè)參數(shù)是要不要展示加減動(dòng)畫。如上面的gif圖,能看到+22。改為false則看不到這個(gè)動(dòng)畫,但實(shí)際小姑還是有的。
講到這,奏樂特技基本實(shí)現(xiàn)。