cocos2dx之渲染树的绘制
来源:互联网 发布:net就业前景 知乎 编辑:程序博客网 时间:2024/05/25 20:00
无论如何复杂的游戏场景也都是精灵通过不同的层次、位置组合构成的,因此只要可以把精灵按照前后层次,在不同的位置绘制出来就完成了游戏场景的绘制。(这里仅考虑由精灵构成的简单游戏,复杂的游戏也许会包含其他游戏元素,但是原理上并不冲突。)在第3章学习游戏元素时,我们曾接触过Cocos2d-x的渲染树结构,渲染树是由各种游戏元素按照层次关系构成的树结构,它展示了Cocos2d-x游戏的绘制层次,因此游戏的渲染顺序就是由渲染树决定的。
回顾Cocos2d-x游戏的层次:导演类CCDirector直接控制渲染树的根节点--场景(CCScene),场景包含多个层(CCLayer),层中包含多个精灵(CCSprite)。实际上,每一个上述的游戏元素都在渲染树中表示为节点(CCNode),游戏元素的归属关系就转换为了节点间的归属关系,进而形成树结构。
CCNode的visit方法实现了对一棵渲染树的绘制。为了绘制树中的一个节点,就需要绘制自己的子节点,直到没有子节点可以绘制时再结束这个过程。因此,为了每一帧都绘制一次渲染树,就需要调用渲染树的根节点。换句话说,当前场景的visit方法在每一帧都会被调用一次。这个调用是由游戏主循环完成的,Cocos2d-x的调度原理,在游戏的每一帧都会运行一次主循环,并在主循环中实现对渲染树的渲染。
void CCDirector::calculateDeltaTime(void){ struct cc_timeval now; if (CCTime::gettimeofdayCocos2d(&now, NULL) != 0) { CCLOG("error in gettimeofday"); m_fDeltaTime = 0; return; } // new delta time. Re-fixed issue #1277 if (m_bNextDeltaTimeZero) { m_fDeltaTime = 0; m_bNextDeltaTimeZero = false; } else { m_fDeltaTime = (now.tv_sec - m_pLastUpdate->tv_sec) + (now.tv_usec - m_pLastUpdate->tv_usec) / 1000000.0f; m_fDeltaTime = MAX(0, m_fDeltaTime); }#ifdef DEBUG // If we are debugging our code, prevent big delta time if(m_fDeltaTime > 0.2f) { m_fDeltaTime = 1 / 60.0f; }#endif *m_pLastUpdate = now;}
绘制父节点时会引起子节点的绘制,同时,子节点的绘制方式与父节点的属性也有关。例如,父节点设置了放大比例,则子节点也会随之放大;父节点移动一段距离,则子节点会随之移动并保持相对位置不变。显而易见,绘制渲染树是一个递归的过程,可以研究CCNode::vist()
- cocos2dx之渲染树的绘制
- cocos2dx之渲染树的绘制
- cocos2dx之渲染树的绘制
- cocos2dx的渲染树
- Cocos2Dx之渲染流程
- Cocos2Dx之渲染流程
- Cocos2Dx之渲染流程
- cocos2dX 文字的渲染
- cocos2dx的渲染机制
- cocos2dx的渲染机制
- 【转】Cocos2Dx之渲染流程
- cocos2dx——节点的渲染(绘制)顺序LocalZOrder、GlobalZOrder、OrderOfArrival
- cocos2dx之文本渲染(CCLabelAtlas,CCLableBMFont,CCLabelTTF)
- Cocos2Dx之渲染流程-欧阳左至
- cocos2dx下离屏渲染遇到的问题
- cocos2dx-ui的渲染机制
- cocos2dx源码分析:TrianglesCommand的合并渲染
- cocos2dx渲染指令CustomCommand的使用
- 自定义富媒体广告:NativeX SDK 5.0发布!
- 对模拟int3的探索
- 精简代码,为网站减负的十大建议
- DEV 控件 GridControl 中合并一列中值相等但是不相邻的单元格
- 组合索引和单列索引效率对比
- cocos2dx之渲染树的绘制
- 深入探索 Java 热部署
- STL学习笔记2 List
- Jquery UI draggable学习
- Convert.ToBase64String(Byte[])和Encoding.UTF8.GetString(Byte[])
- Apache CXF 2.7学习
- 第一个python程序
- 安卓中对SQLite数据库的增删改查
- ByteArrayInputStream源码分析