了解是使用协议还是继承(或两者兼而有之?)

时间:2012-09-04 06:33:02

标签: objective-c

我的游戏中有一种只是水平移动的对象..它有一个这样的方法:

-(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并更新其targetY ..但是我不仅不喜欢这个解决方案,因为我仍然在这两个类中有99%的重复代码,但也因为我的游戏需要在调用moveLeftWithBlock方法之前设置的Y位置。

接下来我想 - 好的,所以我可以让我的游戏调用一个prepareToMove方法,它可以做任何可能需要的设置......对于主对象类型,没有..对于这个第二个对象类型,设置targetY。

然而,我立即开始思考 - 等待----我知道协议是关于明确定义可选或必需的方法,这让我觉得也许我应该在这里使用它,但我不确定如何。

那么,任何人都可以向我解释在这种情况下如何使用协议 - 以及它是否是“要走的路”?

1 个答案:

答案 0 :(得分:0)

任何这些都可行。您可以添加到此andAlsoMoveVertically :( bool)isVertical,然后在函数的if语句中添加垂直移动。