引擎:CocoCreator2.1.0
語言:TypeScript
Git倉庫地址:https://github.com/superXfx/GameDesignPatterns.git
定義——
封裝算法册烈,并可在運行時切換昵仅,切算法的變化獨立于其的使用者私植。
此demo中使用 策略模式 來處理英雄“變身”時兩種不同的移動邏輯。
即Move行為獨立于Hero,將Move于Hero解耦苦掘,并可以在運行時切換。
類圖——
從類圖中可以發(fā)現(xiàn)腊敲,從MoveBehavior類派生出MoveNormal和MoveRotation兩個Move的具體類氓扛。
Hero持有MoveBehavior的引用并可在運行時用具體類賦值它枯芬,從而切換行為。
接下來看看代碼具體實現(xiàn)
1采郎、基類 MoveBehavior
2千所、派生類,MoveNormal蒜埋,MoveRotation
從代碼可以看出:
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行為的具體使用方法。
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