Cocos2d V3 iOS – 如何从App Delegate访问runningScene

我想要在App Delegate中访问我的运行场景。 问题是[[CCDirector sharedDirector] runningScene]返回一个CCScene对象,而不是我场景MyMainScene的实际类。 如果我尝试打电话给我的任何自定义方法,我会得到:

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

我已经试过像这样

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

但是这没有效果。 上面的mainScene对象仍然返回mainScene的类名,并在运行时崩溃。

我也试过dynamic铸造,如这里build议Objective-C dynamic_cast? 。 通过dynamic投射,我不会崩溃,但方法总是返回null。


更新 – 更多的代码

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

IDFAMainScene标头

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

IDFAMainScene实现

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

上面的应用程序将编译。 它调用IDFAMainScene文件好,因为customMethod被调用,并从didLoadFromCCB日志"custom method called" ,但是当它然后尝试从didLoadFromCCBcustomMethd对象调用customMethd applicationDidBecomeActive...它崩溃与错误

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

loadAsScene方法返回一个CCScene对象,并将自定义类作为其唯一子对象。 因此,您需要更改此代码以获取您的自定义类如下(我也转换为点符号,因为我喜欢传播它,只要有可能):

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