Cocos2D兩個方法的重構一例

2021-09-23 21:52:04 字數 1473 閱讀 9198

在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...