1.继承关系图:
动作类的基类是CCAction,任何一种行为都是由它拓展衍变而来的。动作类可以分为四大类:有限次动作类、无限重复动作类、速度动作类和跟随动作类,其中前两者的使用频率最高;而有限次动作类又可以分为瞬时动作类和延时动作类。( 新版本中无限重复动作类(CCRepeatForever)是延时动作类派生出来的)
CCFiniteTimeAction从字面就能看出来(finite = 有限的),是有限次动作类,它是最为普通的行为,就是按时间顺序做一系列事情,做完后行为结束;CCRepeatForever的名字更易懂了,无限重复动作类,就是说它可以让节点反复的做一件事,除非把行为或节点删除,否则永远不会停止;CCSpeed的作用是调整行为实例的执行速度,因此它依赖于其它的动作,单独的CCSpeed没有意义;CCFollow可以使节点跟随指定的另一个节点移动。
2.CCBezierBy 使节点按贝塞尔曲线运动。
CCBezierBy* CCBezierBy::create(float t, const ccBezierConfig& c),ccBezierConfig是一个结构体:
typedef struct _ccBezierConfig {
//! end position of the bezier
CCPoint endPosition;
//! Bezier control point 1
CCPoint controlPoint_1;
//! Bezier control point 2
CCPoint controlPoint_2;
} ccBezierConfig;
CGPoint endPosition 曲线的终点坐标(相对于起点的偏移量,非绝对坐标),图中的P3
CGPoint controlPoint_1 曲线第一个弧度的参考点坐标(相对于起点的偏移量,非绝对坐标),图中的P1
CGPoint controlPoint_2曲线第二个弧度的参考点坐标(相对于起点的偏移量,非绝对坐标),图中的P2
3.样例:
创建并开始动作:
CCActionInterval *actionto = CCMoveTo::create(fSecond,CCPointMake(x,y));
actionto->setTag(TAG_ACTION_BGCAR_MOVE);
pBgCar->runAction(actionto);//pBgCar是使用这个动作的sprite,runAction是ccnode的方法
//停止动作
pBgCar->stopAction(pBgCar->getActionByTag(iTag));