我的游戏中有一种只是水平移动的对象..它有一个这样的方法:
-(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。
然而,我立即开始思考 - 等待----我知道协议是关于明确定义可选或必需的方法,这让我觉得也许我应该在这里使用它,但我不确定如何。
那么,任何人都可以向我解释在这种情况下如何使用协议 - 以及它是否是“要走的路”?
答案 0 :(得分:0)
任何这些都可行。您可以添加到此andAlsoMoveVertically :( bool)isVertical,然后在函数的if语句中添加垂直移动。