在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