0

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

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

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

我怎样才能在父类中做到这一点?

添加在

@interface Parent : CCLayer  {}

+(CCScene*)场景;

-(无效)死亡;

@结尾

@实现父

...

+(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;

}

...

-(无效)死{

// 在角色死亡后调用

[[CCDirector sharedDirector] replacescene:[self scene]]; //这会报错“Parent may not respond to 'scene'”

}


@interface Child1 : 父 {}

+(CCScene*)场景;

@结尾

@实现父

...

+(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;

}

...

@结尾

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

当我将 dead 方法移动到 Child1 并修改它的 self -> Child1 时,它会起作用

请让我知道,如果你不能理解我的问题。谢谢你的回复。

4

1 回答 1

1

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

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

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

}

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

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

于 2012-11-14T03:12:15.930 回答