绘制帧是游戏的关键环节, 要做事情有两件
1) 处理游戏对象的状态变化 ( 位置移动, 碰撞等等 )
2) 重新绘制这些对象
绘制对象
本文谈一下我对 Cocos2D 绘制帧实现的理解, 见下图 ( 注意, 这不是严格的UML, 只是为了便于理解绘制的 )
drawScene 就是要求 Cocos2D 去绘制一帧, Schudler_update() 就是处理 1) 游戏对象的状态变化 这个我们后面会讨论, 先说
2) 重新绘制这些对象
visit 正是实现上屏的方法
visit的要点有2
a) visit 是 Node的方法, Node 是有层次结构的组合模式 ( Composite)
对于普通Node, visit直接调用draw 方法 ( 比如 对于 CCSprite 派生类, 会重载 draw ( 而不是重载 visit) , 而其draw的实现就是调用 opengl 函数直接画图
b) 对于 Composite Node
它的 visit 的实现就是调用它引用到的多个 Nodes ( 可以认为这些就是它的孩子 ) 的 visit 方法.
一个 CCScene 就是一个 Composite Node, 而一个 Sprite 就是一个普通 Node, 当调用 CCScene 的 visit方法, 就调用它所有孩子的 visit方法, 并把整个游戏画面给画了出来.
状态更新
对于状态更新, 我们希望有一个