Cocos2d V3 iOS – Comment accéder à runningScene depuis le délégué de l'application

Je veux accéder à ma scène de course dans le délégué de l'application. Le problème est, [[CCDirector sharedDirector] runningScene] renvoie un object CCScene , plutôt que la class réelle de ma scène MyMainScene . Si j'essaie d'appeler l'une de mes methods personnalisées, j'obtiens:

 -[CCScene customMethod]: unrecognized selector sent to instance 0x156bedc0 

J'ai essayé de lancer comme ça

 CCScene *scene = [[CCDirector sharedDirector] runningScene]; MyMainScene *mainScene = (MyMainScene*)scene; [mainScene customMethod]; 

Mais cela n'a aucun effet. L'object mainScene ci-dessus renvoie toujours le nom de class de CCScene et se CCScene à l'exécution.

J'ai aussi essayé le casting dynamic, comme suggéré ici Objective-C dynamic_cast? . Avec la diffusion dynamic, je ne reçois pas de crash, mais la méthode returnne toujours null.


MISE À JOUR – PLUS DE CODE

Implémentation d'AppController

 #import "cocos2d.h" #import "AppDelegate.h" #import “ IDFAMainScene.h” @implementation AppController - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // default code here } - (CCScene*) startScene { return [CCBReader loadAsScene:@“IDFAMainScene”]; } - (void)applicationDidBecomeActive:(UIApplication *)application { CCScene *scene = [[CCDirector sharedDirector] runningScene]; IDFAMainScene *mainScene = (IDFAMainScene*)scene; [mainScene customMethod]; } 

En-tête IDFAMainScene

 #import <Foundation/Foundation.h> #import "cocos2d.h" @interface IDFAMainScene : CCNode { } -(void)customMethod; 

Implémentation d'IDFAMainScene

 #import "IDFAMainScene.h" @implementation IDFAMainScene -(void)didLoadFromCCB{ [self customMethod]; } -(void)customMethod{ NSLog(@“custom method called"); } 

L'application ci-dessus va comstackr. Il charge le file IDFAMainScene correctement lorsque customMethod est appelé et enregistre la "custom method called" partir de didLoadFromCCB , mais quand il essaie alors d'appeler le customMethd de l'object cast dans applicationDidBecomeActive... il se bloque avec une erreur

 -[CCScene customMethod]: unrecognized selector sent to instance 0x175b7e50 

La méthode loadAsScene renvoie un object CCScene avec votre class personnalisée en tant que fils unique. Par conséquent, vous devez changer ce code pour get votre class personnalisée comme suit (j'ai également converti en notation par points comme j'aime le propager quand c'est possible):

 CCScene *scene = [CCDirector sharedDirector].runningScene; IDFAMainScene *mainScene = (IDFAMainScene*)scene.children.firstObject; [mainScene customMethod];