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.
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];