狀態機 狀態機2,關於戰鬥中兵種狀態的新增狀態

2021-06-29 13:21:11 字數 2577 閱讀 6707

但是了,但是策劃是種天生具備加需求的生物,而做為將需求變成**邏輯的程式猿來

說,只能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...

狀態機小記

工作上有個功能模組用到了類似狀態機的東東,於是上網科普了一番。狀態機是由一系列輸入驅動,然後系統由其中一種狀態轉換為另一種狀態並產生某種輸出,這樣子的乙個系統叫做狀態機。狀態機分為兩種,一種是輸出只和系統狀態有關,叫做摩爾狀態機,另一種是輸出和輸入以及系統狀態都相關,叫做公尺莉狀態機。有關輸入 狀態...