游戲設(shè)計模式 之 策略模式

strategy.gif

引擎:CocoCreator2.1.0
語言:TypeScript
Git倉庫地址:https://github.com/superXfx/GameDesignPatterns.git

定義——
封裝算法册烈,并可在運行時切換昵仅,切算法的變化獨立于其的使用者私植。

此demo中使用 策略模式 來處理英雄“變身”時兩種不同的移動邏輯。
即Move行為獨立于Hero,將Move于Hero解耦苦掘,并可以在運行時切換。

類圖——


Strategy.jpg

從類圖中可以發(fā)現(xiàn)腊敲,從MoveBehavior類派生出MoveNormal和MoveRotation兩個Move的具體類氓扛。
Hero持有MoveBehavior的引用并可在運行時用具體類賦值它枯芬,從而切換行為。

接下來看看代碼具體實現(xiàn)
1采郎、基類 MoveBehavior


image.png

2千所、派生類,MoveNormal蒜埋,MoveRotation


image.png
image.png

從代碼可以看出:
1>update()方法是move行為真正執(zhí)行的地方淫痰,派生類繼承并實現(xiàn)update來實現(xiàn)自己的move行為。
2>setDir(dir)方法則是設(shè)置移動方向
3>至于packParam(),unPackParam(dt)比較有趣整份,它是用來在切換行為時待错,“繼承”上一個行為的參數(shù)用的。
在這里就是dir參數(shù)皂林,即切換move行為后保持方向不變



接下來看看move行為的擁有者Hero朗鸠,以及對Move行為的具體使用方法。


image.png
image.png

1>首先Hero持有一個Move行為的引用础倍,即MoveBehavior烛占,顯而易見。
2>在changeHero中會動態(tài)的切換Move行為沟启,
即this.mMoveInterface = new MoveNormal(this); 或 this.mMoveInterface = new MoveRotation(this);
非常簡單忆家,簡潔優(yōu)雅的就改變了Hero的行為。
另外切換前使用packParam()德迹,unPackParam(data)傳遞參數(shù)芽卿。
3>前面說過,真正的move行為在update中實現(xiàn)胳搞,那么在Hero的update中驅(qū)動Move行為的update即可卸例。

至此称杨,策略模式 在Hero移動上的應(yīng)用已經(jīng)全部完成,可以發(fā)現(xiàn)兩個很棒的優(yōu)點:
1筷转、Move行為與Hero解耦姑原。
這意味著Move行為可以應(yīng)用在任何可移動體上。比如敵人甚至炮彈上呜舒。
2锭汛、當有新的Move行為時,可以做到“對擴展開放袭蝗,對修改關(guān)閉”原則
只需實現(xiàn)一個新的行為類——此處是擴展開放唤殴。
而不需要修改任何現(xiàn)有代碼——此處是對修改關(guān)閉。

下一篇到腥,游戲設(shè)計模式 之 觸發(fā)器
http://www.reibang.com/p/8427617be61e

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末朵逝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子左电,更是在濱河造成了極大的恐慌廉侧,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件篓足,死亡現(xiàn)場離奇詭異段誊,居然都是意外死亡,警方通過查閱死者的電腦和手機栈拖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門连舍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人涩哟,你說我怎么就攤上這事索赏。” “怎么了贴彼?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵潜腻,是天一觀的道長。 經(jīng)常有香客問我器仗,道長融涣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任精钮,我火速辦了婚禮威鹿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘轨香。我一直安慰自己忽你,他們只是感情好,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布臂容。 她就那樣靜靜地躺著科雳,像睡著了一般根蟹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上炸渡,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天娜亿,我揣著相機與錄音,去河邊找鬼蚌堵。 笑死,一個胖子當著我的面吹牛沛婴,可吹牛的內(nèi)容都是我干的吼畏。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼嘁灯,長吁一口氣:“原來是場噩夢啊……” “哼泻蚊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起丑婿,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤性雄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后羹奉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秒旋,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年诀拭,在試婚紗的時候發(fā)現(xiàn)自己被綠了迁筛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡耕挨,死狀恐怖细卧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情筒占,我是刑警寧澤贪庙,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站翰苫,受9級特大地震影響止邮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜革骨,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一农尖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧良哲,春花似錦盛卡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽并村。三九已至,卻和暖如春滓技,著一層夾襖步出監(jiān)牢的瞬間哩牍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工令漂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留膝昆,地道東北人。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓叠必,卻偏偏與公主長得像荚孵,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子纬朝,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容