cocos2dx之渲染树的绘制
来源:互联网 发布:java流程控制 编辑:程序博客网 时间:2024/05/22 12:27
无论如何复杂的游戏场景也都是精灵通过不同的层次、位置组合构成的,因此只要可以把精灵按照前后层次,在不同的位置绘制出来就完成了游戏场景的绘制。(这里仅考虑由精灵构成的简单游戏,复杂的游戏也许会包含其他游戏元素,但是原理上并不冲突。)在第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()
阅读全文
0 0
- 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的使用
- 自动轮播+无限轮播
- 信用卡评分模型(R语言)
- ReactNative-综合案例(02)
- linux系统下硬盘挂载
- 我为什么学python?
- cocos2dx之渲染树的绘制
- 组合数
- springboot基本使用笔记----静态资源(js ,css ...)路径
- MyBatis简单入门使用
- ReactNative-综合案例(03)
- React Native常见问题解决
- Application
- 寻宝---kruskal
- untiy Application API