Cocos3D: вызвать метод делегата из CC3Scene

Как в 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:?


person Loc Pham    schedule 27.12.2014    source источник


Ответы (1)


Решил мою проблему с помощью следующего кода:

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

    ...

}
person Loc Pham    schedule 27.12.2014