近期重構技能的一些心得

重構心得

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

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

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

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

第二次重構

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

第三次重構

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

總結

????總而言之,對于產品來說,好的游戲都是磨出來的,而對于程序來說,好的設計也都是重構出來的。 與君共勉!!!

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

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