DH-SRPG 六:技能與效果實(shí)現(xiàn)

好久不見(jiàn)。說(shuō)起來(lái)戰(zhàn)棋游戲里一般都有技能
最近實(shí)現(xiàn)了技能的框架并更新了SelectManage。雖然還沒(méi)有固定下來(lái),但是然做了幾個(gè)技能來(lái)測(cè)試,感覺(jué)還不錯(cuò)?,F(xiàn)在來(lái)介紹一下,希望能給大家?guī)?lái)一些幫助。
技能框架:
首先技能與其它游戲一樣分為兩個(gè)大類(lèi):主動(dòng)技能與被動(dòng)技能,它們分別有兩個(gè)調(diào)用的入口:
主動(dòng)技能:start
被動(dòng)技能:auto
這兩個(gè)方法都接收一個(gè)字典作為參數(shù)。
對(duì)于主動(dòng)技能,因?yàn)槭鞘謩?dòng)調(diào)用的,所以參數(shù)固定,而被動(dòng)技能因?yàn)槭窃诙喾N情況下都會(huì)調(diào)用所以參數(shù)內(nèi)容會(huì)有所不同,以下是目前的所有auto有的技能調(diào)用的參數(shù):
auto 參數(shù)一般有以下參數(shù)
"class": 大的種類(lèi)
"type": 小的種類(lèi)
"state": 狀態(tài)
"target": 目標(biāo),應(yīng)該是一個(gè)對(duì)象
"target_position": 目標(biāo)位置
戰(zhàn)斗時(shí)觸發(fā)
"class": "ATTACK" # 表示攻擊
"type": "ordinary" # 表示傷害類(lèi)型
"state": "START" # 表示攻擊狀態(tài),如果是攻擊結(jié)束時(shí)就是 "END"
"target": <unit> # 被攻擊的對(duì)象
"harm": <int> # 傷害值
使用例:/game/skills/s_double_attack_magic.tscn
該例子使用了這個(gè)參數(shù)來(lái)在攻擊結(jié)束時(shí)進(jìn)行一次附加攻擊:
可以看到,在auto方法中判斷了參數(shù)來(lái)確定是在攻擊結(jié)束并且滿足cost時(shí)調(diào)用。

移動(dòng)時(shí)觸發(fā)
"class": "MOVE"
"start_position": Vector2 # 出發(fā)坐標(biāo)
"target_position": Vector2 # 目的地
"start_cell": 觸發(fā)的圖塊信息
"target_cell": 目的地的圖塊信息,可以利用這個(gè)來(lái)判別目標(biāo)區(qū)域,實(shí)現(xiàn)類(lèi)似于“走到草地上時(shí)hp+1”的技能
"path": 路徑數(shù)組
"index": 當(dāng)前的下標(biāo)
暫時(shí)沒(méi)有使用例子,不過(guò)感興趣可以參考其它技能來(lái)試著做一個(gè)類(lèi)似于迅捷步伐的效果:“移動(dòng)時(shí)充能,每移動(dòng)一格充能+1,達(dá)到6時(shí)會(huì)在強(qiáng)化下一次攻擊并為自己回復(fù)一定生命值?!?/p>
這應(yīng)該是一個(gè)auto類(lèi)型的效果,并判斷傳入?yún)?shù)的class是不是MOVE,是就index+1,然后如果達(dá)到目標(biāo)值就設(shè)置一個(gè)key值,然后auto在key為true時(shí)再檢測(cè)class是不是ATTACK且是STATE,這里可以增加額外效果,當(dāng)然,這個(gè)auto應(yīng)該還檢測(cè)ATTACK的END,如果需要在攻擊結(jié)束后根據(jù)實(shí)際照成的傷害來(lái)恢復(fù)生命值的話。
回合結(jié)束時(shí)調(diào)用
"class": "ROUND_END"
"user": 技能持有者,
"round_number": 回合數(shù)
使用例:/game/skills/s_rolling_currrent_attack_up.tscn
這是一個(gè)捏他VN的技能:翻滾并強(qiáng)化下一次攻擊,因?yàn)閺?qiáng)化攻擊擁有時(shí)效性所以有用到這個(gè)參數(shù),以下是部分代碼實(shí)現(xiàn):

在技能時(shí)效期間照成了4點(diǎn)傷害,而技能過(guò)期后回復(fù)成了3點(diǎn)傷害

SelectManage更新:
為了能更加好的配合Skill,做了一些更新。
現(xiàn)在加入了”層級(jí)“的概念:
layer里增加了許多回調(diào),也得益于回調(diào),很多效果得以順利實(shí)現(xiàn)。來(lái)看一下用到了clear_callable, move_callable, callable回調(diào)的技能例子:/game/skills/s_dark_explode.tscn

雖然說(shuō)技能還沒(méi)有確定下來(lái),但是已經(jīng)初見(jiàn)形狀了。下一個(gè)目標(biāo)是制作局域網(wǎng)聯(lián)機(jī)功能,這樣就完全從之前的舊項(xiàng)目遷移過(guò)來(lái)了,感謝您的關(guān)注。
致歉:因?yàn)轫?xiàng)目的更新隨時(shí)都有可能會(huì)破壞原有的代碼,您在看到此文時(shí)它可能已經(jīng)不是最新的了,請(qǐng)以現(xiàn)在項(xiàng)目的具體情況為準(zhǔn)。
歡迎大家給項(xiàng)目提Issues
項(xiàng)目地址:https://gitee.com/DH-DoveG/dh-srpg-demo