第一部分:CCFollow跟随动作
CCFollow动作,可以让一个节点跟随另一个节点做位移。
他有两个静态工厂方法,后者可以设置一个跟随范围,离开范围就不再跟随。
1. bool initWithTarget (CCNode *pFollowedNode)
2. bool initWithTarget (CCNode *pFollowedNode, const CCRect &rect)
CCFollow经常用来设置layer跟随sprite,可以实现类似摄像机跟拍的效果。cocos2d-x中的tests里,有类似的例子,代码如下:
1. void ActionFollow::onEnter()
2. {
3. ActionsDemo::onEnter();
4.
5. centerSprites(1);
6. CCSize s = CCDirector::sharedDirector()->getWinSize();
7.
8. m_grossini->setPosition(CCPointMake(-200, s.height / 2));
9. CCActionInterval* move = CCMoveBy::actionWithDuration(2, CCPointMake(s.width * 3, 0));
10. CCActionInterval* move_back = move->reverse();
11. CCFiniteTimeAction* seq = CCSequence::actions(move, move_back, NULL);
12. CCAction* rep = CCRepeatForever::actionWithAction((CCActionInterval*)seq);
13.
14. m_grossini->runAction(rep);
15.
16. this->runAction(CCFollow::actionWithTarget(m_grossini, CCRectMake(0, 0, s.width * 2 - 100, s.height)));
17.}
第二部分:CCDelayTime延时动作
CCDelayTime是一个延时若干秒的动作,最常见的用法就是在一个CCSequence序列动作中,打入若干延时时间,让动作的执行速度慢下来,不至于眼花缭乱,让人反应不过来。
cocos2d-x中的tests里,有类似的例子,代码如下:
1. void ActionDelayTime::onEnter()
2. {
3. ActionsDemo::onEnter();
4.
5. alignSpritesLeft(1);
6.
7. CCActionInterval* move = CCMoveBy::actionWithDuration(1, CCPointMake(150,0));
8. CCFiniteTimeAction* action = CCSequence::actions( move, CCDelayTime::actionWithDuration(2), move, NULL);
9.
10. m_grossini->runAction(action);
11.}
第三部分:CCProgressFromTo与CCProgressTo 进度动作
进度动作,也是一种从无到有逐渐绘制的动作,和淡入淡出的作用类似。
注意进度动作的执行节点为CCProgressTimer,而非我们常用的CCSprite。我们在使用进度动作时,需要指定绘制类型。
cocos2d-x一种提供了6种类型的枚举值:
1. typedef enum {
2. /// Radial Counter-Clockwise 逆时针
3. kCCProgressTimerTypeRadialCCW,
4. /// Radial ClockWise 顺时针
5. kCCProgressTimerTypeRadialCW,
6. /// Horizontal Left-Right 从左往右
7. kCCProgressTimerTypeHorizontalBarLR,
8. /// Horizontal Right-Left 从右往左
9. kCCProgressTimerTypeHorizontalBarRL,
10. /// Vertical Bottom-top 从下往上
11. kCCProgressTimerTypeVerticalBarBT,
12. /// Vertical Top-Bottom 从上往下
13. kCCProgressTimerTypeVerticalBarTB,
14.} CCProgressTimerType;
cocos2d-x中的tests里,有全部的进度动作的例子,其中按时针绘制的例子代码如下:
1. void SpriteProgressToHorizontal::onEnter()
2. {
3. SpriteDemo::onEnter();
4.
5. CCSize s = CCDirector::sharedDirector()->getWinSize();
6.
7. CCProgressTo *to1 = CCProgressTo::actionWithDuration(2, 100);
8. CCProgressTo *to2 = CCProgressTo::actionWithDuration(2, 100);
9.
10. CCProgressTimer *left = CCProgressTimer::progressWithFile(s_pPathSister1);
11. left->setType( kCCProgressTimerTypeHorizontalBarLR );//设置动作类型
12. addChild(left);
13. left->setPosition(CCPointMake(100, s.height/2));
14. left->runAction( CCRepeatForever::actionWithAction(to1));
15.
16. CCProgressTimer *right = CCProgressTimer::progressWithFile(s_pPathSister2);
17. right->setType( kCCProgressTimerTypeHorizontalBarRL );//设置动作类型
18. addChild(right);
19. right->setPosition(CCPointMake(s.width-100, s.height/2));
20. right->runAction( CCRepeatForever::actionWithAction(to2));
21.}
第四部分:CCGridAction 网格动作家族
网格动作,是一种特殊的变换效果,类似于特效,可以实现全屏幕的,翻转,抖动,震荡,水波纹等。CCGridAction是所有网格动作的基类,他有两个派生类
CCTiledGrid3DAction:基于Tiled的网格动作
CCGrid3DAction:普通网格动作
这些动作的相关例子,都在cocos2d-x的tests中的EffectsTest里。因为用法简单,但是数量庞大,又不是特别常用,而且效果用语言很难准确描述,就不赘述了。直接看代码就行。