超类中的self classmethod然后使用它的子类

时间:2012-06-26 05:17:10

标签: cocos2d-iphone self scene

超级类中的

[self classmethod]然后使用它的子类 我正在制作一些基于cocos2d的iPhone游戏。 在我之前看过的很多游戏中,当用户的角色死亡或消失时,场景重新开始。 它可以简单地完成,但如果在每个子类中实现,则需要一些处理。

[[CCDirector sharedDirector] replacescene:[childclass scene]];

但是如果我可以在父类中实现,它可以一次完成。我猜。 所以我在父类中尝试[self scene],但它不起作用。

如何在父类中执行此操作?

添加

@interface Parent : CCLayer  {}

+(CCScene *)场景;

- (无效)死;

@end

@implementation Parent

...

+(CCScene *)场景{

CCScene *scene = [CCScene node];

// 'layer' is an autorelease object.
Parent *layer = [Parent node];

// add layer as a child to scene
[scene addChild: layer];

// return the scene
return scene;

}

...

- (void)dead {

//在人物死亡后被召唤

[[CCDirector sharedDirector] replacecescene:[self scene]]; //这会产生错误“家长可能无法回应'场景'”

}


@interface Child1:Parent {}

+(CCScene *)场景;

@end

@implementation Parent

...

+(CCScene *)场景{

CCScene *scene = [CCScene node];

// 'layer' is an autorelease object.
Child *layer = [Child node];

// add layer as a child to scene
[scene addChild: layer];

// return the scene
return scene;

}

...

@end

我认为Child1不需要死方法实现,因为它是Parent的子类 但它不起作用。还有Child2,Child3 ......也是。

当我将死方法移动到Child1并修改其自身时,它会起作用 - > Child1

如果你不明白我的问题,请告诉我。 谢谢你的回复。

1 个答案:

答案 0 :(得分:1)

找到了我想要的解决方案。

- (void)dead {//如果你的角色死了,请调用此方法

[[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:2.0 scene:[self.class scene]]];

}

在dead方法中,self可以是从超类继承的子类。

ex)超类是Stage:CCLayer,子类是Stage1:当你的角色在Stage1,Stage2,Stage3中死亡时调用Stage dead方法......你不需要在那些类中实现每个死方法( Stage1,Stage2 ..)喜欢[[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:2.0 scene:[StageX scene]]];