近期重構(gòu)技能的一些心得

重構(gòu)心得

????最近一直在做有關(guān)技能和戰(zhàn)斗相關(guān)的代碼整理,也史無前例血淚交加的進(jìn)行了3次重構(gòu),程序員果然是一群與眾不同的群體,如此的樂于推翻自己過往的工作,卻又樂此不疲。

????但是話說回來,每一次的重構(gòu)都帶來的意想不到的效果,雖然說中途會(huì)遇到一些小問題,但是大體上來說,重構(gòu)帶來的好處是非常多的,特別適合項(xiàng)目前期探索階段。

戰(zhàn)斗技能的腳本系統(tǒng)

????一般游戲都免不了需要接觸戰(zhàn)斗系統(tǒng),戰(zhàn)斗無非就是單位/技能/Buff/飛行物/事件這些模塊而已。而這其中的核心就是技能。 最開始做的一版架構(gòu)下,每一個(gè)技能都由腳本進(jìn)行處理,通過技能表直接映射到技能文件,新加一個(gè)技能新寫一個(gè)腳本文件,這樣的好處是,技能邏輯可以做的非常靈活,而且調(diào)試也比較方便,直接在相應(yīng)的技能中output或者斷點(diǎn)就好了。

第二次重構(gòu)

????不過上述做法缺點(diǎn)也是很明顯的,新加一個(gè)技能必須重新新一些一個(gè)腳本。雖然可以通過模版的方式減少后續(xù)的操作,但是追求完美的程序是不會(huì)止步于此(閑的蛋疼)的,考慮到多數(shù)技能可能只是中途的某些元素不一樣,其實(shí)多數(shù)流程大體上都差不多(造成傷害,搜索單位,移動(dòng)目標(biāo),顯示特效,播放動(dòng)作,等等),那么我們是不是可以將這些元素獨(dú)立出來,并提供一個(gè)可以配置的機(jī)制,這樣任何一個(gè)技能只是基礎(chǔ)元素的組合,程序只需要維護(hù)一個(gè)個(gè)的基礎(chǔ)元素就好。這樣就形成了第二次重構(gòu)的思路基礎(chǔ)。具體設(shè)計(jì)上,我們獨(dú)立出來了一個(gè)效果的概念,技能可以擁有多個(gè)效果,效果可以主動(dòng)施放的時(shí)候觸發(fā),也可以被動(dòng)監(jiān)聽事件的時(shí)候觸發(fā),效果內(nèi)部是一個(gè)個(gè)的基礎(chǔ)元素,我們稱之為操作,操作附帶條件,這樣一個(gè)效果內(nèi)就形成了一個(gè)簡(jiǎn)單的邏輯,技能施放本質(zhì)上就是走效果內(nèi)部的邏輯流程。工作中實(shí)際情況是,重構(gòu)結(jié)束后技能應(yīng)用配置上也確實(shí)達(dá)到了預(yù)期的效果,程序員不用再維護(hù)一個(gè)個(gè)的技能了,確實(shí)蠻爽的,但是需要著重注意的一點(diǎn)是,對(duì)基礎(chǔ)元素的設(shè)計(jì)一定要慎重,我們現(xiàn)在光是傷害就有5種基礎(chǔ)的操作,沒辦法,需求就是要支持不同類型。所以基礎(chǔ)元素的設(shè)計(jì)一定要根據(jù)具體的游戲需求來。

第三次重構(gòu)

????最開始的設(shè)計(jì)上,邏輯和顯示是一一對(duì)應(yīng)的,完全的所見即所得,游戲中進(jìn)行到了什么步驟,比如回合制中等待玩家操作,單位A移動(dòng)中這些情況下,邏輯也是完全處于這個(gè)狀態(tài)的,這種設(shè)計(jì)的好處是在于,所見即所得,調(diào)試清晰,缺點(diǎn)也非常的明顯,就是邏輯和顯示存在耦合。舉個(gè)例子就是施放技能,當(dāng)顯示復(fù)雜一些的時(shí)候,邏輯甚至需要去讀取某一個(gè)模型的執(zhí)行時(shí)間來決定邏輯自身需要協(xié)程式的卡住多久,這種設(shè)計(jì)下實(shí)現(xiàn)邏輯會(huì)非常復(fù)雜,特別是邏輯存在各種各樣事件的時(shí)候。這個(gè)需求促使了我們進(jìn)行了第三次重構(gòu)。首先我們分析,由于我們自己是一個(gè)回合制游戲,游戲中并不存在過多的玩家操作,甚至可以非常簡(jiǎn)化,即輪到玩家的操作,施放一下技能,后續(xù)的邏輯(直到下一輪之前)都是確定的。那么我們可以這樣設(shè)計(jì):玩家操作后(主要是技能施放),邏輯就開始進(jìn)行運(yùn)算,在一幀之內(nèi)將所有的結(jié)果都計(jì)算完畢,亦即邏輯已經(jīng)停留在了下一回合階段,在這個(gè)過程中邏輯會(huì)輸出一系列的顯示流,通知顯示進(jìn)行處理。顯示層根據(jù)顯示流來進(jìn)行一個(gè)個(gè)具體表現(xiàn)的處理,諸如顯示單位,播放動(dòng)作,播放特效等等。這樣的好處是,將復(fù)雜的表現(xiàn)和清晰的邏輯分開,表現(xiàn)層只關(guān)心自己的表現(xiàn),而邏輯可以更清晰的處理自己最終輸出數(shù)據(jù)的結(jié)果,分離的算是比較完美。這種設(shè)計(jì)的復(fù)雜度會(huì)更多的交給表現(xiàn),甚至是表現(xiàn)需要負(fù)責(zé)進(jìn)行表現(xiàn)的排序處理等等。不過這種設(shè)計(jì)帶來的好處實(shí)在是太多了,過往我們需要做諸如游戲開始后整個(gè)邏輯屏幕抖動(dòng)一下/播放各種特效后游戲才真正開始這樣的效果,是需要修改邏輯的,現(xiàn)在邏輯已經(jīng)完全不關(guān)心這個(gè)了,全部交給表現(xiàn)來處理,可以做很多豐富的效果。

總結(jié)

????總而言之,對(duì)于產(chǎn)品來說,好的游戲都是磨出來的,而對(duì)于程序來說,好的設(shè)計(jì)也都是重構(gòu)出來的。 與君共勉?。。?/p>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,366評(píng)論 25 708
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,207評(píng)論 1 92
  • 教程ISO11 Beta 降級(jí) ISO10 ???本人iPhone6S和iPhone6,在第一時(shí)間升級(jí)了IOS11...
    i黃濤閱讀 936評(píng)論 0 1
  • 故事斷片了吧,要不怎么亂的找不到邏輯呢? 當(dāng)生活變得不純粹的時(shí)候,心情也有了雜質(zhì)。不知何時(shí)后來的我比以前的想象中多...
    意恐遲遲閱讀 365評(píng)論 0 0
  • “大多數(shù)人都在關(guān)注你飛的高不高,只有少數(shù)人關(guān)心你飛的累不累?!?不記得是幾年前,這句話開始在網(wǎng)絡(luò)上盛行。咋聽之下,...
    my彩色沙漠閱讀 376評(píng)論 6 9

友情鏈接更多精彩內(nèi)容