cocos2d-x之导演

来源:互联网 发布:sap 知乎 编辑:程序博客网 时间:2024/04/28 19:30

导演(Director):

        Director是cocos2d-x引擎的核心组件,它被设计为一个单例类,我们可以通过cocos2d::Director:getInstance()来获取导演类的句柄。

        Director的功能主要由以下部分:

        (1)OpenGL-ES的初始化

                  首先,在 AppControler.mm 的 application:didFinishLaunchingWithOptions 中,我们可以看到如下代码

    // Init the CCEAGLView    CCEAGLView *eaglView = [CCEAGLView viewWithFrame: [window bounds]                                     pixelFormat: kEAGLColorFormatRGBA8                                     depthFormat: GL_DEPTH24_STENCIL8_OES                              preserveBackbuffer: NO                                      sharegroup: nil                                   multiSampling: NO                                 numberOfSamples: 0];    // Use RootViewController manage CCEAGLView     _viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];    _viewController.wantsFullScreenLayout = YES;    _viewController.view = eaglView;    ... ...
    // IMPORTANT: Setting the GLView should be done after creating the RootViewController    cocos2d::GLView *glview = cocos2d::GLView::createWithEAGLView(eaglView);    cocos2d::Director::getInstance()->setOpenGLView(glview);    cocos2d::Application::getInstance()->run();
                注意标红的部分,先实例化了一个 CCEAGLView 的对象,然后替换 _viewController 中的view类,并用 cocos2d::CLView:createWithEAGLView 方法,完成cocos2d::GLView的初始化工作,并调用Director的setOpenGLView,设置Render。


        而在mac版下,主要通过以下代码来完成初始化设置工作

    bool AppDelegate::applicationDidFinishLaunching() {        // initialize director        auto director = Director::getInstance();        auto glview = director->getOpenGLView();        if(!glview) {            glview = GLView::create("My Game");            director->setOpenGLView(glview);        }


        (2)游戏场景的切换

       // 游戏中得第一个场景由该函数显示       Director::getInstance()->runWithScene(cocos2d::Scene *scene)       // push出下一个场景,pause上一个场景 适合弹出占用内存较小的Scene       Director::getInstance()->pushScene(cocos2d::Scene *scene);       // pop当前场景       Director::getInstance()->popScene();       // pop当前场景,直接显示 rootScene       Director::getInstance()->popToRootScene();       // replace 当前场景,上一个Scene释放       Director::getInstance()->replaceScene(cocos2d::Scene *scene)
                其中 push 和 pop 的函数,是维护了堆栈,所有push到堆栈的Scene并不会立即释放,只有pop的Scene才会释放掉。所以,push到堆栈中得Scene不易过多,且最好都是占用内存较小的Scene。

                如果是replaceScence翻页效果太单调了,可以参照一下场景翻页效果


        (3)控制游戏的暂停、继续和退出

        Director::getInstance()->pause(); // 暂停        Director::getInstance()->resume(); // 恢复        Director::getInstance()->isPaused(); //判断释放暂停                  Director::getInstance()->end();         // 停止并退出游戏

         (4)获取屏幕尺寸

       /**returns visible size of the OpenGL view in points.        *  the value is equal to getWinSize if don't invoke        *  GLView::setDesignResolutionSize()        */       Director::getInstance()->getVisbleSize();


0 0
原创粉丝点击