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"
,但是当它然后尝试从didLoadFromCCB
的customMethd
对象调用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];