2012-09-04 77 views
0

我有我的遊戲,簡單地水平移動的對象類型。它有這樣的方法:瞭解是否使用協議或繼承(?或兩者)

-(void)moveLeftWithBlock:(void(^)())block { 
    self.targetX = self.position.x - MOVE_AMOUNT; 
    id action = [CCMoveTo actionWithDuration:0.125f position:ccp(self.targetX, self.targetY)]; 
    id ease = [CCEaseInOut actionWithAction:action rate:4]; 
    [self runAction: [CCSequence actions: ease, 
        [CCCallBlock actionWithBlock:block], nil]]; 
} 

...

現在,我想要創建第二種類型的對象,除了它也可以垂直移動之外,它完全一樣......我最初的想法是僅僅對該對象的類進行子類化,並覆蓋moveLeftWithBlock並更新其目標Y ..但不能只是我不喜歡這個解決方案,因爲我最終還是得到了兩個類中99%的重複代碼,但也因爲我的遊戲需要在臨近之前設置Y位置調用moveLeftWithBlock方法。

所以接下來我想 - 好的,所以我可以讓我的遊戲調用prepareToMove方法,它可以做任何可能需要的設置...對於主對象類型,什麼都不..對於第二個對象鍵入,設置目標Y.

但是,我立即開始思考 - 等待----我知道協議是關於明確定義可選或必需的方法的,並且這讓我覺得也許我應該在這裏利用它,但我不是當然如何。

那麼,任何人都可以向我解釋在這種情況下如何使用一個協議 - 如果它是「要走的路」或不是?

回答

0

任何這些都可以。你可以添加這個和AlsoMoveVertically:(bool)isVertical,然後在函數中的if語句中添加垂直移動。