cocos2d-x引擎的核心类-沈大海cocos2d-x教程7

在cocos2d-x应用启动以后会创建一个opengl窗口用来实现图形绘制和事件处理

draw()     该方法绘制每一个node

update() 该方法处理每一帧的逻辑变化

ccTouchesBegan() 处理用户的交互事件

/当cocos2d-x 应用启动以后会执行

CCApplication::sharedApplication()->run();

我们看下具体代码:

int CCApplication::run()
{
    PVRFrameEnableControlWindow(false);

    // Main message loop:
    MSG msg;
    LARGE_INTEGER nFreq;
    LARGE_INTEGER nLast;
    LARGE_INTEGER nNow;

    QueryPerformanceFrequency(&nFreq);
    QueryPerformanceCounter(&nLast);

    // Initialize instance and cocos2d.
    if (!applicationDidFinishLaunching())
    {
        return 0;
    }

    CCEGLView* pMainWnd = CCEGLView::sharedOpenGLView();
    pMainWnd->centerWindow();
    ShowWindow(pMainWnd->getHWnd(), SW_SHOW);

    while (1)
    {
        if (! PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
            // Get current time tick.
            QueryPerformanceCounter(&nNow);

            // If it's the time to draw next frame, draw it, else sleep a while.
            if (nNow.QuadPart - nLast.QuadPart > m_nAnimationInterval.QuadPart)
            {
                nLast.QuadPart = nNow.QuadPart;
                CCDirector::sharedDirector()->mainLoop();
            }
            else
            {
                Sleep(0);
            }
            continue;
        }

        if (WM_QUIT == msg.message)
        {
            // Quit message loop.
            break;
        }

        // Deal with windows message.
        if (! m_hAccelTable || ! TranslateAccelerator(msg.hwnd, m_hAccelTable, &msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }

    return (int) msg.wParam;
}

CCDirector::sharedDirector()->mainLoop();
我们看到CCDirect实现了应用的主循环,我们看下循环中做的工作是什么

void CCDisplayLinkDirector::mainLoop(void)
{
    if (m_bPurgeDirecotorInNextLoop)
    {
        m_bPurgeDirecotorInNextLoop = false;
        purgeDirector();
    }
    else if (! m_bInvalid)
     {
         drawScene();
    
         // release the objects
         CCPoolManager::sharedPoolManager()->pop();       
     }
}

在循环中主要实现了绘制当前的场景和自动释放对象。

因此在cocos2d-x 开发中,无非我们编程实现 N个场景CCScene,然后根据用户交互或逻辑处理切换显示,如果游戏开发实现 菜单,帮助,暂停,游戏,高分等几个不同场景,用户交互后进行切换,在游戏场景中可能会有地图, NPC,道具等元素,这时候就需要添加多个CCLayer和CCSprite.

核心的类和功能

CCDirector  gameLoop,实现场景绘制,切换

CCScene   场景类,每个场景可以理解为一个窗口显示内容的集合

CCLayer    图层,包括图片层,文字层,按扭层,动画层,每个层有坐标,显示内容,消息回调处理

CCSprite 精灵层,可以实现动画播放

CCAction 动作,控制图层运动,渐变,旋转等

---------------------------------------------------------------------------

CCObject-----------CCAction

                  -----------CCNode---------------CCLayer

                                              |----------------CCScene

                                              |-----------------CCSprite

   继续关注blog.csdn.net/sdhjob  @weibo.com/shunfengche           

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值