對于一般的按鍵輸入,我們通常這么做,直接if按了什么鍵,就執(zhí)行相應的操作
在這里我們是將用戶的輸入和程序行為硬編碼在一起,這是我們很自然就想到的最快的做法。
但是如果這是一個大型游戲,往往我們需要實現(xiàn)一個按鍵配置的功能(話說2077直到上線都沒有實現(xiàn)這個功能),這樣寫就不行了。 我們需要讓這些“行為”可以變化。
同時,我們有時候還會希望玩家可以操控不同的角色,而不同的就角色可能在按同一個按鍵的時候做出不同的動作。
這個時候我們就需要考慮使用命令模式了。
采用命令模式后,我們將jump,fire這些方法做成一個抽象類command的子類,這樣每個命令就有了面向對象的形式的封裝(將命令變?yōu)閿?shù)據(jù)對象,讓這個對象和其他對象一樣可以被存儲和傳遞)
定義基類
定義命令子類,其他的命令和這個子類一樣定義就行
注意到這里會傳入actor,也就是說,這樣做的話游戲就會根據(jù)傳入的對象來做不同的復雜指令
然后在剛才做按鍵輸入的地方,我們這么做,只傳回命令類的指針,這里buttonX_的類型是command*
然后在Tick里這么寫
通過這種方式,我們就解決了開頭提到的兩個問題。
1.對于不同的按鍵,由于其類型都是command*,我們只需要讓這個指針指向不同的子類命令對象,就可以實現(xiàn)按鍵配置功能了。
2.對于不同的游戲角色,我們因為會往里邊傳入不同actor的引用,最后調(diào)用的是actor中內(nèi)置的方法(如jump方法),這就實現(xiàn)了不同的角色擁有不同的按鍵行為。
通過命令模式,我們實現(xiàn)了將按鍵輸入控制器,輸入的命令,以及目標角色的行為三者解耦。
命令模式還可以做什么?
由于我們將命令封裝成了數(shù)據(jù),那么我們就很容易實現(xiàn)一個命令隊列,從而可以輕易實現(xiàn)撤銷、重做、時光倒流等功能。
命令數(shù)據(jù)還可以形成日志,用于復現(xiàn)用戶行為,便于重復測試同樣序列命令對各種目標的影響。文章來源:http://www.zghlxwxcb.cn/news/detail-625735.html
原書鏈接:
命令模式 · Design Patterns Revisited · 游戲設計模式 (tkchu.me)文章來源地址http://www.zghlxwxcb.cn/news/detail-625735.html
到了這里,關于命令模式 Command Pattern 《游戲設計模式》學習筆記的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!