2014-12-27 148 views
1

在Cocos3D中,如何调用自定义CC3Scene到UIViewController的回调?Cocos3D:从CC3Scene调用委托方法

我遵循CC3DemoMultiScene-iOS演示,这是我所做的。

文件的兴趣:CustomCC3Layer.hCustomCC3Scene.hMainViewController.mMainViewController.h

CustomCC3Layer.h:没有什么特别的这个文件。

CustomCC3Scene.h:我宣布委托...

@class CustomCC3Scene; 

@protocol CustomCC3SceneDelegate <NSObject> 

@optional 
-(void)sceneCallbackMethod:(CustomCC3Scene *)scene didSelectPart:(NSString*)part; 

@end 

@interface CustomCC3Scene : CC3Scene { 

@property (nonatomic, weak) IBOutlet id<CustomCC3SceneDelegate> delegate; 

@end 

MainViewController.h:继承CustomCC3SceneDelegate

@interface MainViewController : UIViewController<CustomCC3SceneDelegate> 
... 
@end 

MainViewController.m:我创建的3D场景,添加为UIView的子项。

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self.view addSubview:[self createGLView]]; 
    CC3Backgrounder.sharedBackgrounder.shouldRunTasksOnRequestingThread = YES; 
} 

-(CCGLView*) createGLView { 

    CGRect rect = CGRectMake(0, 0, 200, 300); 

    CCGLView* glView = [CCGLView viewWithFrame: rect 
            pixelFormat: kEAGLColorFormatRGBA8 
            depthFormat: GL_DEPTH24_STENCIL8 
          preserveBackbuffer: NO 
           numberOfSamples: 1]; 

    CCDirector* director = CCDirector.sharedDirector; 
    director.animationInterval = (1.0f/kAnimationFrameRate); 
    director.displayStats = NO; 
    director.view = glView; 

    // Run the initial static 2D intro scene 
    CCScene* scene = [[CustomCC3Layer layer] asCCScene]; 
    [director runWithScene:scene]; 

    // I need to set the delegate... but this throws unrecognized selector error 
    // CustomCC3Scene* xxx = (CustomCC3Scene*)[[CustomCC3Layer layer] asCCScene]; 
    // xxx.delegate = self; 

    return glView; 
} 

我试图内MainViewController.m做的是设置CustomCC3SceneDelegate =自但这抛出错误。如何正确设置委托,以调用sceneCallbackMethod:didSelectPart:?

回答

0

解决了我的问题,下面的代码:

-(CCGLView*) createGLView { 
    ... 
    ... 
    CC3Layer* layer = [CustomCC3Layer layer]; 
    CustomCC3Scene* scene = (CustomCC3Scene*)[layer cc3Scene]; 
    scene.delegate = self; 
    [director runWithScene:[layer asCCScene]]; 

    ... 

}