Cocos2d-x 2.0.1 学习tests示例(二)ActionsTest

作者:无幻
博客: http://blog.csdn.net/akof1314
初学Cocos2d-x,如文章有错误之处,欢迎指出


       自上篇《 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)));
}
编译运行,如下图所示:


类似的 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);
}
编译运行,如下图所示:


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值