1.核心的类和功能
CCDirector gameLoop,实现场景绘制,多个场景之间切换控制;控制游戏的停止,暂停,等生命周期。
CCScene 场景类,每个场景可以理解为一个游戏镜头,状态
CCLayer 图层,包括图片层,文字层,按扭层,动画层,每个层有坐标,显示内容,消息回调处理
CCSprite 精灵层,可以实现动画播放
CCAction 动作,控制图层运动,渐变,旋转等
关系如下
CCDirector
游戏运行场景CCScreen
背景层CCLayer
精灵CCSprite
主层
精灵
控制层
精灵
ccnode经常重写的方法:
draw() 该方法绘制每一个node
update() 该方法处理每一帧的逻辑变化
ccTouchesBegan() 处理用户的交互事件
ccp 创建CGPoint对象最常用的宏
2.项目入口
didFinishLaunchingWithOptions:
设置RootViewController,并建立EAGLView对象__glView作为主view。__glView在创建过程中会纪录到静态变量中,引擎中通过 EAGLView.sharedEGLView()来获取这个view,所有渲染工作都是在这里实现的!。
CCApplication
CCDirectorCaller 控制消息循环,底层由CADisplayLink实现,最终调用cocos2d::CCDirector::sharedDirector()->mainLoop();完成渲染。
CCDirector的渲染有这样几步
1.判断是否删除导演,如果是,清除导演,否则2.
2.是否无效,无效进入退出渲染
3.渲染动画
a.计算时间增量
b.如果没有暂停,执行导演的update
现执行updata 后执行客户的schedule
c.如果需要切换场景,切换场景
d.调用m_pRunningScene->visit(); 刷新Scene,这是个递归的过程,先绘制zOrder < 0的child,然后drow自己,然后访问z>0 的
e.绘制 NotificationNodes , 用于场景切换时仍能够显示的界面
除了上边说的,visit前要kmGLPushMatrix(); visit后要kmGLPopMatrix(); 期间还要出发beforDrow和endDrow事件。
4.清除无用的对象,通过pop栈顶的autoreleasepool的方式实现