• cocos2dx进阶学习之CCDirector


    继承关系

    CCDirecotor -> CCObject, TypeInfo

    处理主窗口消息,管理何时、何种方式执行场景。

    经常被翻译成导演,负责管理整个游戏的进程推动和周边支持。



    成员

    inline CCScene* getRunningScene(void) { return m_pRunningScene; }

    获取当前运行的场景,一个时刻只有一个场景在运行


    inline double getAnimationInterval(void) { return m_dAnimationInterval; }

    virtual void setAnimationInterval(double dValue) = 0;

    FPS相关设置


    inline bool isDisplayStats(void) { return m_bDisplayStats; }

    inline void setDisplayStats(bool bDisplayStats) { m_bDisplayStats = bDisplayStats; }

    在程序左下角是否显示FPS信息


    inline float getSecondsPerFrame() { return m_fSecondsPerFrame; }

    获取一帧的时间(秒)


    inline CCEGLView* getOpenGLView(void) { return m_pobOpenGLView; }

    void setOpenGLView(CCEGLView *pobOpenGLView);

    设置窗口,对于CCDirector这个导演来说,CCEGLView可以类比为舞台。


    inline bool isNextDeltaTimeZero(void) { return m_bNextDeltaTimeZero; }

    void setNextDeltaTimeZero(bool bNextDeltaTimeZero);


    inline bool isPaused(void) { return m_bPaused; }

    是否暂停了


    inline unsigned int getTotalFrames(void) { return m_uTotalFrames; }

    帧数,自从这个导演启动后,调用的帧数


    inline ccDirectorProjection getProjection(void) { return m_eProjection; }

    void setProjection(ccDirectorProjection kProjection);

    void reshapeProjection(const CCSize& newWindowSize);

    ccDirectorProjection相关


    void setViewport();

    设置glViewPort


    inline bool isSendCleanupToScene(void) { return m_bSendCleanupToScene; }

    是否一个被替换的场景会受到cleanup消息


    CCNode* getNotificationNode();

    void setNotificationNode(CCNode *node);

    用来显示全局消息的node,这个消息不受场景切换影响


    CCDirectorDelegate* getDelegate() const;

    void setDelegate(CCDirectorDelegate* pDelegate);

    导演代理,提供更新接口可供用户重新实现


    CCSize getWinSize(void)

    CCSize getWinSizeInPixels(void);

    CCSize getVisibleSize();

    CCPoint getVisibleOrigin();

    getWinSize与getWinSizeInPixels的差别在于是否使用DesignResolutionSize,getWinSizeInPixsels是窗口实际大小

    而getWinSize是DesignResolutionSize,getVisibleSize是在有DesignResolutionSize的情况下,有对不齐的情况时不一样的值


    CCPoint convertToGL(const CCPoint& obPoint);

    CCPoint convertToUI(const CCPoint& obPoint);

    坐标转换,从GL坐标到UI坐标的相互转换,GL坐标左下角为原点,UI坐标则是坐上角


    void runWithScene(CCScene *pScene);

    进入scene,这个函数在第一次进入scene时候调用


    void pushScene(CCScene *pScene);

    暂停当前scene,将其推入暂停scene栈,启动新的scene


    void popScene(void);

    弹出当前运行的scene,如果栈中还有scene,那么继续栈顶的scene,如果没有,程序退出


    void popToRootScene(void);

    弹出所有的scene,除了最后一个不弹


    void popToSceneStackLevel(int level);

    弹到某个地方,如果level为0,那么相当于程序结束,如果level为1,那么相当于popToRootScene,如果level大于栈深度,那啥也不干


    void replaceScene(CCScene *pScene);

    替换scene,和pushScene不一样的是,replace不在栈中保存,是直接替换


    void end(void);

    void pause(void);

    void resume(void);

    进度管理,结束,暂停,继续scene


    virtual void stopAnimation(void) = 0;

    virtual void startAnimation(void) = 0;

    停止和开始画场景,默认实现和pause、resume相同


    void purgeCachedData(void);

    清空缓存,主要是CCTextureCache, CCSpriteFrameCache, CCLabelBMFont所指缓存

    在cocos2dx中有不少缓存类,这些缓存类,类似舞台上的常用道具,常用道具当然放在离演员最近的地方(内存)

    但是当地方(内存)不够时,导演负责指挥清除这些缓存。


    void setDefaultValues(void);

    void setGLDefaultValues(void);

    void setAlphaBlending(bool bOn);

    void setDepthTest(bool bOn);

    设置一些OpenGL参数


    void setContentScaleFactor(float scaleFactor);

    float getContentScaleFactor(void);

    设置缩放因子


    virtual void mainLoop(void) = 0;

    主循环,负责画scene


    static CCDirector* sharedDirector(void);

    获取单例的导演对象





  • 相关阅读:
    oracle 巡检脚本(自动化) 规格严格
    应用版日常linux系统巡检shell脚本 规格严格
    linux系统巡检脚本 规格严格
    超级详细RPM 规格严格
    项目管理纪实一:需求调研日志
    其实你不懂程序员
    Silverlight同步(Synchronous)调用WCF服务
    GeoServer地图开发解决方案(一):环境搭建篇
    新年新起点荣获2011年度Silverlight方向Microsoft® MVP奖
    工作中发现 VC 通过 Flex 访问 FusionChart for FLEX 当VC端的驱动数据串过长时,会出现 No Data to Display错误
  • 原文地址:https://www.cnblogs.com/new0801/p/6177227.html
Copyright © 2020-2023  润新知