-
什么是BUFF?
或許直接回答這個問題,那么你收獲到的答案將是五花八門的。這個問題暫時放下不談,我們可以去看其他的游戲應該是怎么設計的。
我經常玩的游戲里邊BUFF提現的比較明顯的,可能只有英雄聯盟了,如果你不熟悉這個游戲,我也會對於每一個狀態做出解釋,所以我想我們還是可以討論到一塊去的。
先整理一下,游戲里邊可能會被認為是做Buff或者你也覺得那個可能並不是個BUFF的東西全都收集起來,然后逐個來分析。
藍Buff(提高回藍速度,減少CD):我想首先應該拿出來說的就是這個了。當你身上持有這個Buff的時候,你將會持續的加快回藍速度,並且,你的技能的CD時間會變短。從這個地方我們不難看出BUFF的基本作用就是#提高回藍量,減少CD時間#。
紅Buff(攻擊別人時,別人會持續掉血):這個還相對特殊一些,因為這個BUFF是提高傷害的,他時怎么提高傷害的呢?如果你攜帶這個BUFF普通攻擊或者使用某些可以出發特效的攻擊,就可以給對方添加一個持續傷害的BUFF(隔一段時間掉血的),從而提高傷害輸出。BUFF可以#響應普通攻擊#。
女妖面紗(阻擋下一個技能):這個你可能覺得並不算是一個BUFF,他屬於一個技能的特效。這個我們可能真的比較難定義,畢竟都可以實現。邏輯上呢,也都可以說的過去。那么我們就看一下究竟怎么來處理比較方便。就算不是,我們也可以看一下BUFF系統有沒有類似的需求。BUFF可以#響應技能觸發#
莫甘娜的E(免疫所有的魔法效果):收到魔法傷害時,護盾值可以替換血量消耗。可以讓所有的魔法效果失效。BUFF可以#響應血量消耗# #響應技能觸發,並使之失效#
引燃(持續傷害):接受這個BUFF的時候,你的血量就會在一段時間內,持續掉血,一秒掉個N多滴。並且,會添加一層重傷效果。BUFF可以#修改自身血量#。
重傷(回血效果減半):接受這個效果的時候,再調用回血的邏輯時,回血的數量將減少一半。BUFF可以#可以響應加血邏輯#
禁錮(沒有辦法移動):接受這個效果之后,你將不可以移動,只能呆在原地。BUFF可以#禁止本身的某一段邏輯運行#
眩暈(沒有辦法移動,並且自己也沒有辦法主動普通和大部分其他效果):接受這個效果時,你將不可以移動,並且大部分普工和技能沒有辦法觸發,當然也有例外,比如說蠻王的R可以在眩暈的時候主動開啟。BUFF可以#禁止普攻,禁止技能釋放#
減速(沒啥好說的):就是減速。BUFF可以#降低自身移動速度#
減傷(自己的輸出會降低):就是,物理輸出或者魔法輸出會得到對應的降低#可以參與到輸出的邏輯#
凈化(解除惡意效果):禁錮、減速(這個記不清有沒有,姑且這么寫吧)、中毒、重傷、持續掉血等等。那么這個屬於BUFF嗎?我個人認為不是的,但是這個肯定跟BUFF有關系,姑且列上來。BUFF系統可以#根據類型消除惡意的BUFF#
水銀飾帶(解除眩暈):可以根據消除某一個固定類型的BUFF。BUFF系統可以根據#消除禁錮類型的BUFF#
……
其實可以分析還有很多。姑且先說這么幾個吧,然后總結一下BUFF究竟是什么。
除了女妖面紗是永久存在的以外(凈化和水銀飾帶屬於技能),其他都是在幾秒或者幾十秒之后就會恢復正常。那么我想BUFF可以這么定義:持續一定時間(永久也是一定的時間),並且可以修改自身屬性和相應自身的某些時間的狀態集合(一個BUFF可能攜帶多個效果)的,叫做BUFF。
BUFF邏輯有以下部分:有一定的時間(永久或者某一段時間)、修改自身屬性(加速、減速、回血速度、減少CD時間等等)、參與部分邏輯的運算(重傷、眩暈、減速、不受技能效果等等)
好了,下面進入正題,怎么來設計BUFF系統。
先提出幾個問題:
- 同一個BUFF,可以重疊嗎?(比如減速跟減速、引燃跟引燃)
- 如果兩個同樣的BUFF並存,那么數據上應該怎么計算?UI上怎么表現?
- 不同的技能可以打出同一個BUFF嗎?(比如持續傷害跟持續傷害)
- BUFF需要怎么跟其他的BUFF交互(比如說:存在引燃的時候加血、存在重傷的時候加血、存在引燃的時候引燃)
- 不同的BUFF是怎么重疊的?(比如、減速跟減速、加速跟減速、引燃與引燃)
- BUFF之間存在優先級嗎?(比如女妖面紗和輪子媽的E同時存在時,先觸發哪個效果)
然后,我來說一下我對應英雄聯盟處理的理解,順便回答一些這個問題,並且附帶部分實例以及我對於這些實物的理解。
- 同一個BUFF可以重疊嗎?答案是邏輯上肯定是允許的,但是有些在業務上是不被允許的。
- 先說一個相對容易理解的,減速效果基本上可以跟其他的任何效果重疊,包括其他的減速效果。比如,英雄A給你一個減速效果(比如說煉金術師的那個黏黏的技能),這個時候英雄B給你一個減速的效果(比如說蠻王的嘲諷)。這個時候你肯定是被雙重減速的。如果英雄B的技能比英雄A更加弱,不論是替換也好,還是沒有效果也好,都不能達到很好的游戲效果,所以這個地方肯定是並存的,減速效果。
- 引燃跟引燃是替換式的(就是后一個會替換前一個的)。這個為什么是替換式的效果,你能想象一下,如果對面五個人一級的時候。抓人會有多容易嗎?五個點燃,一人A一下,此人必掛。為了可玩性這種技能只能做成替換性。
- 持續傷害上有沒有並存式的?也有,比如說中毒效果。就應該是並存式,不可能因為后邊中了其他類型的毒就會頂替掉前邊的中毒效果
- 總結:BUFF系統上再設計的時候是肯定允許同一個BUFF同時存在的,至於業務上就看具體的業務室怎么回事了
- 如果兩個同樣的BUFF並存,那么數據上應該怎么計算?UI上怎么表現?
- 兩個BUFF並存的時候,在數值的計算上應該是以某種方式進行疊加的,比如說減速效果的疊加。UI上則需要根據對應的業務來進行相應的處理,如果需要重點表現出這個BUFF的來源,或者對應的倒計時的這種情況下,則應該分成兩個不同的UI來表現,如果僅僅表示自己是存在這個BUFF的情況下,則應該將兩個BUFF合並起來表現
- 並且,一個BUFF的一部分效果被取消時,BUFF還應該是存在的,直到這個BUFF的所有效果完全消失時,才算整個BUFF消失掉
- 不同的技能可以打出同一個BUFF嗎?
- 這個需要看具體的業務需求,如果是業務需求是同一個BUFF那么就是同一個BUFF。
- 其實這個問題更多的時候問的是一種狀態,比如說,中毒跟引燃是不是共同引用了同一個狀態?畢竟他們除了UI以外,其他的效果基本上可以說是一模一樣,所以在BUFF上他們屬於不同的BUFF但是實現的業務邏輯上他們可以使用同一個持續傷害的狀態實現。
- BUFF需要怎么跟其他的BUFF交互
- 應該先定義下一下BUFF的交互都包含哪些:BUFF相互的影響(存在重傷效果時,治療效果減半;存在免疫魔法效果時,魔法沒有效果只有傷害;存在格擋時,下一次受得普攻無效;減速效果的疊加)、BUFF的替換(引燃之間的相互替換、中毒效果的層數疊加)、BUFF的消除(技能消除BUFF、BUFF之間的抵消)
- BUFF相互影響:這個可以通過修改自身數據來修改,比如說,治療時候的治療系數(治療的時候可以通過這個系數來控制質量血量)、魔法/物理的格擋次數(魔法或者物理傷害的時候,扣除這個數據)、自己本身速度值的控制
- BUFF的替換:這個數據相對較小,可以在BUFF添加的時候,自己處理,比如說,引燃。在添加引燃效果時,可以代碼檢查一下是不是存在引燃,如果存在,直接刪掉原來的。添加新的就OK了。
- BUFF的相互抵消:同替換就OK,添加的時候,判斷是否可以抵消掉自身的BUFF存在就OK,如果存在,則不添加就OK。
- 技能消除BUFF:可以根據BUFF的類別(減速、禁錮、重傷、持續傷害等等)或者BUFF ID(對應BUFF名字的ID比如:引燃、莫甘娜的E等等)來消除BUFF
- 不同的BUFF是怎么重疊的?
- 可以重疊的通過修改自身屬性來實現數據上的重疊
- 不可以重疊的,在BUFF內部的某個回調、添加BUFF時的檢查、或者配表區別來實現兼容性都是可取的。視具體情況而定
- BUFF之間存在優先級嗎?
- 這個是必然的,不過,我覺得很有必要統一一下這個優先級的定義:是指不同的BUFF之間的先后調用(女妖面紗和輪子媽的E同時存在誰先觸發?),或者修改部分具體屬性的優先級(加速與減速同時存在的時候,先算減速?還是先算加速?算法不統一的話,可能會造成,因為BUFF添加的先后順序或者儲存BUFF狀態的順序而發生的不確定因素。這個是需要盡力避免的)。
- 推薦的優先級:容易獲得的狀態先被觸發。加速減速的話。確定下來就好,不過推薦先加后減。
總結:
- BUFF系統需要兩個列表UI層面列表和狀態層面列表
- 添加BUFF的時候,需要添加一個UI層面列表和對應的BUFF的狀態層面列表,並且將UI層面列表中的數據與BUFF層面列表的狀態綁定(當狀態被移除的時候需要判定對應的BUFF列表是不是也需要被移除)
- 在人物自身中添加對應的相關屬性值(女妖面紗、輪子媽的E可以格擋兩次魔法傷害,在他們同事存在時,格擋了傷害,需要減少對應人物的格擋值,並且,觸發提供格擋效果的BUFF對應回調)
- BUFF的回調,主要依靠於注入的方式進行回調
- BUFF的替換,可以使用BUFF自身控制或者關系表的方式來進行處理
- 原文地址:http://www.cnblogs.com/anxin1225/p/4750025.html?utm_source=tuicool&utm_medium=referral