self classmethod в суперклассе, а затем использовать его дочерний класс

[self classmethod] в суперклассе, а затем использовать его в дочернем классе. Я делаю игру для iPhone на основе cocos2d. Во многих играх, которые я видел раньше, сцена перезапускается, когда персонаж пользователя умирает или уходит. Это можно сделать просто, но требуется некоторая обработка, если она реализована в каждом дочернем классе.

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

Но если бы я мог реализовать в родительском классе, это можно было бы сделать один раз. Наверное. Я попробовал [self scene] в родительском классе, но это не сработало.

Как я могу сделать это в родительском классе?

добавлен в

@interface Parent : CCLayer  {}

+ (CCScene *) сцена;

- (недействительно) мертвый;

@конец

@implementation Родитель

...

+ (CCScene *) scene {

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: [собственная сцена]]; // Это вызывает ошибку «Родитель может не отвечать на 'сцену'»

}


@interface Child1: Parent {}

+ (CCScene *) сцена;

@конец

@implementation Родитель

...

+ (CCScene *) scene {

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 ... тоже.

Он работает, когда я перемещаю мертвый метод в Child1 и изменяю его self -> Child1

Пожалуйста, дайте мне знать, если вы не можете понять мой вопрос. спасибо за ответ.


person bureaucoconut    schedule 26.06.2012    source источник
comment
Ваш вопрос расплывчатый ... Чего именно вы пытаетесь достичь   -  person giorashc    schedule 26.06.2012
comment
Я подозреваю, что вы неправильно используете дочерний класс, родительский класс, метод класса и подобные термины.   -  person user102008    schedule 26.06.2012


Ответы (1)


Я нашел решение, которое хотел.

- (void) dead {// если ваш персонаж умер, вызовите этот метод

[[CCDirector sharedDirector] replaceScene: [CCTransitionFade transitionWithDuration: сцена 2.0: [сцена self.class]]];

}

В мертвом методе self может быть дочерним классом, унаследованным от суперкласса.

ex) суперкласс - Stage: CCLayer, а дочерний класс - Stage1: мертвый метод Stage вызывается, когда ваш персонаж умирает на Stage1, Stage2, Stage3 ... Вам не нужно реализовывать каждый мертвый метод в этом классе (Stage1, Stage2 ..) как [[CCDirector sharedDirector] replaceScene: [CCTransitionFade transitionWithDuration: сцена 2.0: [сцена StageX]]];

person bureaucoconut    schedule 14.11.2012