Objective c Cocos3D:从CC3Scene调用委托方法
在Cocos3D中,如何调用从自定义CC3Scene到UIViewController的回调 我正在关注CC3DemoMultiScene iOS演示,下面是我所做的 感兴趣的文件: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
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]];
...
}