Cocos2d-x 2.0.1 动画学习资料

自上篇《 Cocos2d-x 2.0.1 学习tests示例(一)Manual Transformation 》继续学习tests示例。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
void HelloWorld::runMyTest2()
{
     // 以PNG图片创建精灵
    CCSprite *pgrossini = CCSprite::create( "Images/grossini.png");
    CCSprite *ptamara = CCSprite::create( "Images/grossinis_sister1.png");
    CCSprite *pkathia = CCSprite::create( "Images/grossinis_sister2.png");

     // 增加到层上,指定Z轴顺序
    addChild(pgrossini,  1);
    addChild(ptamara,  2);
    addChild(pkathia,  3);

     // 获得视图大小
    CCSize s = CCDirector::sharedDirector()->getWinSize();

     // 设置坐标
    pgrossini->setPosition( CCPointMake(s.width/ 2, s.height/ 2));
    ptamara->setPosition( CCPointMake(s.width/ 4, s.height/ 2));
    pkathia->setPosition( CCPointMake( 3 * s.width/ 4, s.height/ 2));

     // 移动一个CCNode对象到指定的新坐标,第一个参数表示所移动的时间,单位秒
    CCActionInterval*  actionTo = CCMoveTo::create( 2, CCPointMake(s.width- 40, s.height- 40));

     // 按指定的增量坐标,增量移动一个CCNode对象,第一个参数表示所移动的时间
    CCActionInterval*  actionBy = CCMoveBy::create( 2, CCPointMake( 80, 80));

     // 返回一个与actionBy反向的动作
    CCActionInterval*  actionByBack = actionBy->reverse();

     // 执行动作
    ptamara->runAction( actionTo);

     // 执行一系列的动作,碰到NULL结束
    pgrossini->runAction( CCSequence::create(actionBy, actionByBack,  NULL));

     // 执行动作
    pkathia->runAction(CCMoveTo::create( 1, CCPointMake( 40, 40)));
}
编译运行,如下图所示:
Cocos2d-x 2.0.1 动画学习资料_第1张图片

类似的 CCActionInterval 动作,还有
CCMoveTo 移动到
CCMoveBy 增量移动
CCScaleTo 缩放到
CCScaleBy 增量缩放
CCSkewTo 切变到
CCSkewBy 增量切变
CCRotateTo 旋转到
CCRotateBy 增量旋转
CCJumpTo 跳跃到
CCJumpBy 增量跳跃
CCBezierTo 贝兹移动到
CCBezierBy 增量贝兹移动到
CCBlink 闪烁
CCFadeIn 淡入
CCFadeOut 淡出
CCFadeTo 淡化到
CCTintTo 渐变到
CCTintBy 增量渐变
CCDelayTime 延时
CCReverseTime 时间逆向
CCAnimate 动画
CCGridAction 网格动画
CCSequence 序列执行
CCRepeat 重复执行
CCRepeatForever 永远重复执行
CCSpawn 同时执行
CCActionEase 补间动画


       下面实现下tests里的动画效果,拷贝资源文件夹Resources下的"Images/grossini_dance_01.png"~"Images/grossini_dance_14.png",共14张图像到MyTest资源文件夹Resources下,拷贝"animations/animations-2.plist"、"animations/grossini.plist"、"animations/grossini.png"、"animations/grossini_blue.plist"、"animations/grossini_blue.png"、"animations/grossini_family.plist"、"animations/grossini_family.png",到MyTest资源文件夹Resources下,自定义函数runMyTest3函数的代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
void HelloWorld::runMyTest3()
{
     // 以PNG图片创建精灵
    CCSprite *pgrossini = CCSprite::create( "Images/grossini.png");
    CCSprite *ptamara = CCSprite::create( "Images/grossinis_sister1.png");
    CCSprite *pkathia = CCSprite::create( "Images/grossinis_sister2.png");

     // 增加到层上,指定Z轴顺序
    addChild(pgrossini,  1);
    addChild(ptamara,  2);
    addChild(pkathia,  3);

     // 获得视图大小
    CCSize s = CCDirector::sharedDirector()->getWinSize();

     // 设置坐标
    pgrossini->setPosition( CCPointMake(s.width/ 2, s.height/ 2));
    ptamara->setPosition( CCPointMake(s.width/ 4, s.height/ 2));
    pkathia->setPosition( CCPointMake( 3 * s.width/ 4, s.height/ 2));

     // 创建动画
    CCAnimation* animation = CCAnimation::create();
     forint i= 1;i< 15;i++)
    {
         char szName[ 100] = { 0};
        sprintf(szName,  "Images/grossini_dance_%02d.png", i);
         // 以图像文件名添加帧
        animation->addSpriteFrameWithFileName(szName);
    }
     // 延迟时间(秒)应持续2.8秒,共14帧
    animation->setDelayPerUnit( 2.8f /  14.0f);

     // 是否应当在动画完成时,恢复原来的帧
    animation->setRestoreOriginalFrame( true);

     // 以动画来创建一个动画动作
    CCAnimate* action = CCAnimate::create(animation);
    pgrossini->runAction(CCSequence::create(action, action->reverse(),  NULL));

     // 动画缓存
    CCAnimationCache *cache = CCAnimationCache::sharedAnimationCache();
     // 从plist属性列表文件添加动画
    cache->addAnimationsWithFile( "animations/animations-2.plist");
     // 按名称返回之前添加的动画
    CCAnimation *animation2 = cache->animationByName( "dance_1");

     // 以动画来创建一个动画动作
    CCAnimate* action2 = CCAnimate::create(animation2);
    ptamara->runAction(CCSequence::create(action2, action2->reverse(),  NULL));

     // 复制动画
    CCAnimation *animation3 = (CCAnimation *)animation2->copy()->autorelease();
     // 设置循环次数
    animation3->setLoops( 4);

     // 以动画来创建一个动画动作
    CCAnimate* action3 = CCAnimate::create(animation3);
    pkathia->runAction(action3);
}
编译运行,如下图所示:
Cocos2d-x 2.0.1 动画学习资料_第2张图片

你可能感兴趣的:(Cocos2d-x 2.0.1 动画学习资料)