【问题标题】:Cocos3D: Invoke delegate method from CC3SceneCocos3D:从 CC3Scene 调用委托方法
【发布时间】:2014-12-27 18:52:19
【问题描述】:

在 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:?

【问题讨论】:

    标签: objective-c cocos3d


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-26
      • 1970-01-01
      • 2012-07-20
      • 2013-07-02
      相关资源
      最近更新 更多