但是了,但是策劃是種天生具備加需求的生物,而做為將需求變成**邏輯的程式猿來
說,只能say ok,i look(好吧,我看看),好吧,那來看看有什麼新的需求
戰鬥模組在有各種複雜的技能,技能中包含著一種控制行為的buff,稱為控制行為buff,
比較常見的控制項行為buff有冰凍,眩暈,擊飛等等,以下是乙個帶有控制行為buff的技能
描述:霜凍造成100點傷害,並冰凍敵人3s
受到對應控制行為buff的作用角色會進入到對應的狀態,
如角色中了乙個冰凍buff,那麼角色會進入到冰凍狀態,表現為角色動畫停止在當前幀,
並帶有冰凍特效,無法進行攻擊,ok,我們先不管什麼複雜的技能,來看**如何變化,
這裡有乙個新的狀態是冰凍,那麼我們在兵種類中加乙個冰凍的介面,具體**如下:
local soldier = class("soldier")
function soldier:ctor()
end--待機
function soldier:onidle()
print("切換到待機狀態")
end--行走
function soldier:onwalk()
print("切換到行走狀態")
end--攻擊
function soldier:onattack()
print("切換到攻擊狀態")
end--冰凍
function soldier:onfrozen()
print("切換到冰凍狀態")
endreturn soldier
新加了乙個onfrozen,在這個介面下實現狀態的切換,在角色中了乙個冰凍buff時就呼叫這個介面,
使角色的動畫停在當前幀,並帶有冰凍特效,但根據冰凍的作用來看這裡有很大的問題,冰凍狀態
會持續一段時間,在這段時間內角色不能切換到待機狀態,行走狀態,攻擊狀態,狀態的切換有條件
限制,好的,那來修改**唄,修改後的**如下:
這裡加乙個檔案,定義狀態id,比較簡單,理解上沒有難度
local stateid = {}
stateid.unknown = -1
stateid.idle = 1 --待機
stateid.walk = 2 --行走
stateid.attack = 3 --攻擊
stateid.frozen = 4 --冰凍
return stateid
兵種的**如下:
local soldier = class("soldier")
function soldier:ctor()
self.istateid = stateid.unknown
end--待機
function soldier:onidle()
if self:isfrozen() then return end
self.istateid = stateid.idle
print("切換到待機狀態")
end--行走
function soldier:onwalk()
if self:isfrozen() then return end
self.istateid = stateid.walk
print("切換到行走狀態")
end--攻擊
function soldier:onattack()
if self:isfrozen() then return end
self.istateid = stateid.attack
print("切換到攻擊狀態")
end--冰凍
function soldier:onfrozen()
if self:isfrozen() then return end
self.istateid = stateid.frozen
print("切換到冰凍狀態")
endfunction soldier:isfrozen()
return self.istateid == stateid.frozen
endreturn soldier
加了乙個isfrozen()的函式,返回角色是否處於冰凍狀態,然後在其他幾個函式中,
在切換狀態前先做一下判斷,有一點不是一定的,就是當前狀態切換到當前狀態,
如冰凍狀態切換到冰凍狀態,這個看需求了,大部分情況下這種切換是無意義的
經過簡單的修改,**邏輯也能按照預想的邏輯走了,一切看似正常,就加了一點點
**問題就解決了,真的解決了嗎?不是的,要知道,要謹記下面這一句話:
策劃是種天生具備加需求的生物
是啊,需求總是在變化的,想想,如果要求加乙個眩暈的狀態,那會有多少的改動?
按照上面的做法,每加乙個狀態都需要去檢查是否需要去給其他狀態切換加一些約束
條件,如冰凍,到專案後期,兵種的狀態越來越多,那加乙個狀態需要檢查多少**,
想想都瘋掉,恨不得把策劃揍一頓,可是想想這些狀態需求都是合理的,那做為工程師
(為什麼我不說程式設計師,因為兩者是有區別的),我們是需要乙個良好的解決方案的
狀態機 狀態機0
近半年都忙於做專案,沒有太多的時間去整理和總結在專案中用過的技術 個人還是覺得技術需要總結提煉和沉澱的,忙到沒時間去總結提公升其實不 是什麼好事,這次講下狀態機,在戰鬥型別的遊戲中角色有多種不同的狀態,而狀態的切換錯綜複雜,23種設計模式中有一種模式叫做狀態模式,不過 這種模式是把狀態切換條件放到各...
python 狀態機 Python 狀態機
class statemachine def init self self.handlers 狀態轉移函式字典 self.startstate none 初始狀態 self.endstate 最終狀態集合 引數name為狀態名,handler為狀態轉移函式,end state表明是否為最終狀態 de...
狀態機小記
工作上有個功能模組用到了類似狀態機的東東,於是上網科普了一番。狀態機是由一系列輸入驅動,然後系統由其中一種狀態轉換為另一種狀態並產生某種輸出,這樣子的乙個系統叫做狀態機。狀態機分為兩種,一種是輸出只和系統狀態有關,叫做摩爾狀態機,另一種是輸出和輸入以及系統狀態都相關,叫做公尺莉狀態機。有關輸入 狀態...