cocos2d的所有消息分发处理和渲染工作,都是在主线程的mainLoop无限循环中执行的。我们主要分析一下它渲染的套路,简化图如下:

由图可见,在每次循环都会调用Director的drawScene函数,它先判断是否需要绘制新的场景,即_nextScene,如果有,则把_nextScene赋值给_runningScene,并对它进行初始化。然后,调用_openGLView的renderScene函数,它内部会调用scene的visit函数,visit函数会遍历所有它的子节点,并调用子节点的visit(如果子节点也有子节点,同理继续往下遍历),并且调用自身的draw函数,draw函数通常会被子类所覆盖,如果该类需要绘制,则会在draw里生成绘制命令放到队列中。然后,在后面的_renderer->render()函数中,会从队列里取出命令,进行真正的渲染。
网友评论