Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c Cocos3D:从CC3Scene调用委托方法_Objective C_Cocos3d - Fatal编程技术网

Objective c Cocos3D:从CC3Scene调用委托方法

Objective c Cocos3D:从CC3Scene调用委托方法,objective-c,cocos3d,Objective C,Cocos3d,在Cocos3D中,如何调用从自定义CC3Scene到UIViewController的回调 我正在关注CC3DemoMultiScene iOS演示,下面是我所做的 感兴趣的文件:CustomCC3Layer.h,CustomCC3Scene.h,MainViewController.m,MainViewController.h CustomCC3Layer.h:这个文件没有什么特别之处。 @class CustomCC3Scene; @protocol CustomCC3SceneDele

在Cocos3D中,如何调用从自定义CC3Scene到UIViewController的回调

我正在关注CC3DemoMultiScene iOS演示,下面是我所做的

感兴趣的文件:
CustomCC3Layer.h
CustomCC3Scene.h
MainViewController.m
MainViewController.h

CustomCC3Layer.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
- (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;
}
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
- (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:?

使用以下代码解决了我的问题:

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

    ...

}