2014-12-27 78 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]]; 

    ... 

}