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 并更新它的 targetY.. 但不仅我不喜欢那个解决方案吗,因为我仍然在两个类中得到 99% 的重复代码,而且还因为我的游戏需要在调用 moveLeftWithBlock 方法之前设置 Y 位置。

所以接下来我想——好的,所以我可以让我的游戏调用一个 prepareToMove 方法,它可以进行任何可能需要的设置……对于主要对象类型,什么都没有……对于第二个对象类型,设置目标Y。

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

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

4

1 回答 1

0

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

于 2012-09-04T06:40:28.393 回答