Как в Cocos3D вызвать обратный вызов из пользовательского CC3Scene в UIViewController?
Я слежу за демонстрацией CC3DemoMultiScene-iOS и вот что я сделал.
Интересующие файлы: CustomCC3Layer.h
, CustomCC3Scene.h
, MainViewController.m
, MainViewController.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=self, но это вызывает ошибку. Как правильно установить делегата, чтобы вызывался sceneCallbackMethod:didSelectPart:?