Cocos2d-x Update Draw 执行
来源:未知 责任编辑:责任编辑 发表时间:2014-05-26 10:57 点击:次
先抛出结果,Update先于Draw执行。
以Android平台来分析
找到Cocos2dRender.java
找到函数
public void onDrawFrame(final GL10 gl)
这是Android OpenGL的刷帧函数,在里面Cocos2d-x执行了Native函数
Cocos2dxRenderer.nativeRender();
找打Jni目录 Java_org_cocos2dx_lib_Cocos2dxRenderer.cpp
JNIEXPORT void JNICALL Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeRender(JNIEnv* env) {
cocos2d::CCDirector::sharedDirector()->mainLoop();
}顺藤摸瓜
class CCDisplayLinkDirector : public CCDirector
void CCDisplayLinkDirector::mainLoop(void)
{
if (m_bPurgeDirecotorInNextLoop)
{
m_bPurgeDirecotorInNextLoop = false;
purgeDirector();
}
else if (! m_bInvalid)
{
drawScene();
// release the objects
CCPoolManager::sharedPoolManager()->pop();
}
}drawScene() 望文生义
// Draw the Scene
void CCDirector::drawScene(void)
{
// calculate "global" dt
calculateDeltaTime();
//tick before glClear: issue #533
if (! m_bPaused)
{
m_pScheduler->update(m_fDeltaTime);
}
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
/* to avoid flickr, nextScene MUST be here: after tick and before draw.
XXX: Which bug is this one. It seems that it can't be reproduced with v0.9 */
if (m_pNextScene)
{
setNextScene();
}
kmGLPushMatrix();
// draw the scene
if (m_pRunningScene)
{
m_pRunningScene->visit();
}
// draw the notifications node
if (m_pNotificationNode)
{
m_pNotificationNode->visit();
}
if (m_bDisplayStats)
{
showStats();
}
kmGLPopMatrix();
m_uTotalFrames++;
// swap buffers
if (m_pobOpenGLView)
{
m_pobOpenGLView->swapBuffers();
}
if (m_bDisplayStats)
{
calculateMPF();
}
}首先执行了
m_pScheduler->update(m_fDeltaTime);
然后执行了
// draw the scene
if (m_pRunningScene)
{
m_pRunningScene->visit();
}void CCNode::visit()
{
// quick return if not visible. children won't be drawn.
if (!m_bVisible)
{
return;
}
kmGLPushMatrix();
if (m_pGrid && m_pGrid->isActive())
{
m_pGrid->beforeDraw();
}
this->transform();
CCNode* pNode = NULL;
unsigned int i = 0;
if(m_pChildren && m_pChildren->count() > 0)
{
sortAllChildren();
// draw children zOrder < 0
ccArray *arrayData = m_pChildren->data;
for( ; i < arrayData->num; i++ )
{
pNode = (CCNode*) arrayData->arr[i];
if ( pNode && pNode->m_nZOrder
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 进入详细评论页>>
您可能感兴趣的文章
- Cocos2d-x教程(17)-Box2D 物理引擎
- cocos2dxHellowoed 发现 2.2.3
- cocos2d-x学习笔记(5)-- CCScene场景的切换
- Cocos2d-x MultipleTouch & CCControllButton'
- [cocos2d-x IOS游戏开发]2014年开发及学习计划:coc
- Cocos2dx 3.0 过渡篇(二十五)死不了的贪食蛇(触摸
- cocos2d-x3.0 ListView
- Cocos2d-x初学指南(5): Tiled Map的使用(视角移动,碰
- cocos2dx图片适配不同机型
- [C/OC的那点事儿]Objective-C实现学生成绩管理系统

![cocos2d_x+lua[2]](/uploads/allimg/131030/110J64609-0-lp.jpg)








