在rpg遊戲專案的gamespace類中原來有乙個方法:
-(instancetype)initwithgamescene:(gamescene *)gamescene mapname:(nsstring*)mapname;
功能主要為用指定的地圖初始化遊戲空間布局,後來由於使用方便的原因,增加了乙個類似的方法:
-(instancetype)initwithgamescene:(gamescene *)gamescene mapname:(nsstring *)mapname
spawnattilepos:(cgpoint)tilepoint;
該方法比原來的方法僅僅多了乙個引數,用來初始化player出現在地圖場景中的瓦塊位置.
這樣就出現了功能類似的2個方法,這勢必造成**的重複,會對將來的**修改帶來非常壞的影響,所以今天我們就想辦法對其重構.
首先我們將第乙個方法前面的幾行**提煉出去,形成乙個新的方法:
-(void)instancepreinit:(gamescene*)gamescene mapname:(nsstring*)mapname
然後在2個方法中分別用該方法替換原有的**:
-(instancetype)initwithgamescene:(gamescene *)gamescene mapname:(nsstring *)mapname
spawnattilepos:(cgpoint)tilepoint
}self
.userinteractionenabled = yes;
_walkabletiles = [nsmutablearray array];
[self initwalkabletiles];
_npcarray = [nsmutablearray array];
_interactthingary = [nsmutablearray array];
_followary = [nsmutablearray array];
}
但是在第乙個方法中,對瓦塊座標要做一些修正以居中在瓦塊顯示,但在第二個方法中不需要修正,所以先要將這點重構之然後再呼叫字尾方法:
cgpoint spawnpos = [self getplayerspawnpos];
spawnpos = [_mh centerobjectspos:spawnpos];
[self instancesufinit:spawnpos];
第二個方法重構後的**如下:
cgpoint spawnpos = [_mh positionfortilepos:tilepoint];
[self instancesufinit:spawnpos];
現在2個方法共享同樣的字首和字尾方法,也消除了冗餘**,我們就這樣完成了本次重構. cocos2d筆記 cocos2d的單例模式
cocos2d充分使用了單例設計模式,這裡有必要提及它是因為它是經常是討論熱點。大體上說,乙個singleton是乙個類,它在應用使用期中僅僅例項化一次。為了確保如此,就要使用乙個既建立又訪問此物件例項的靜態方法。因此,你不使用alloc init或者靜態自動釋放初始化器 static autore...
Cocos2d開發系列 一
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!當前最新版本為1.0。本教程選用的是穩定版本0.99.5。install templates.sh檔案,這個就是cocos2d的安裝指令碼。你可以直接在終端裡執行這個指令碼進行安裝,但如果你的xcode沒有安裝在預設目錄 下,則你需要在命令中新增乙...
cocos2d的5個重要協議
5個重要協議 protocolccrgbaprotocol nsobject 設定 cccolor3b 結構的顏色資料 void setcolor cccolor3b color cccolor3b color 如果紋理有 premultiplied alpha 資料 那麼更改透明度同時會更改rgb...