zoukankan      html  css  js  c++  java
  • cocos2dx-Action动作

    声  明


           本教程仅用于初学cocos2dx同学使用,内容由本人(孤狼)学习过程中笔记编写,本教程使用cocos2dx版本为2.1.4。本教程内容可以自由转载,但必须同时附带本声明,或注明出处。

    gl.paea.cn版权所有。



           大家好,欢迎回到“和屌丝一起学coco2dx”系列教程,上节我们说到“CCScrollView视图”做了一个可以拖动的背景,不知道你做出来没有,这节开始,我们就不说控件了,因为,你已经把基本控件学完了 ,你蛮厉害的嘛。嘿嘿,好了,从这节开始,我们就要学操作代码部分了,这块相对控件那块来说稍微难一点,枯燥一点,但是我相信这不是打到你的理由,你一定会继续努力学会它的是吧。好,那我们开始今天的学习-Action动作。


    【一】:它是什么


           顾名思义,Action动作就是我们用来控制各个元素的命令,我们通过这些命令来控制各个控件向上,向下,插入...艹邪恶了,好了知道是什么了就行了。


    【二】:函数


    1.常用动作操作函数

    [1]:runAction("action对象");    

       //执行一个action动作对象

    [2]:CCDirector::sharedDirector()->getActionManger()->pauseTarget("对象");

       //暂停一个对象的动作

    [3]:CCDirector::sharedDirector()->getActionManager()->pauseAllRunningActions();

       //暂停所有对象的动作

    [4]:pauseSchedulerAndActions();

       //暂停所有对象的动作及其更新函数

    [5]:CCDirector::sharedDirector()->getActionManager()->resumeTarget("对象");

       //继续一个对象的动作

    [6]:CCDirector::sharedDirector()->getActionManager()->resumeTargets("CCSet对象");

       //继续所有对象的动作

    [7]:resumeSchedulerAndActions();

       //继续所有对象的动作及其更新函数

    [8]:stopAction("action对象");

       //停止对象的动作

    [9]:stopActionByTag("tag值");

       //停止目标对象的动作

    [10]:stopAllActions();

       //停止所有对象的动作

    [11]:CCDirector::sharedDirector()->getActionManager()->removeAction("action对象");

       //删除动作对象

    [12]:CCDirector::sharedDirector()->getActionManager()->removeActionByTag("tag值");

       //删除动作对象

    [13]:CCDirector::sharedDirector()->getActionManager()->removeAllActions();

       //删除所有动作对象

    [14]:CCDirector::sharedDirector()->getActionManager()->removeAllActionsFromTarget("tag值");

       //删除所有相同tag值得动作对象



    2.常用动作函数

    怎么记呢?这里孤狼我给大家总结了个规律:


    所有的调用都是create

    有给予(To)就有伴随(By)

    带把儿(By)的都有双向动作。(使用reverse()可以获取反向动作)

    有进(In)就有出(Out),我们更喜欢进进出出(InOut)。

    这里还要注意的一点是:By方法的变量都是相对当前量的,不是绝对的哦。



    [1]:CCMoveTo::create("时间","坐标");

        //几秒后移动到坐标点

    [2]:CCMoveBy::create("时间","坐标");

        //几秒后移动到坐标点

    [3]:CCScaleTo::create("时间","缩放比例");

        //几秒后缩放到指定大小(1:原大小;大于1:放大;小于1:缩小)

    [4]:CCScaleBy::create("时间","缩放比例");

        //几秒后缩放到指定大小(1:原大小;大于1:放大;小于1:缩小)

    [5]:CCRotateTo::create("时间","角度");

        //几秒后旋转多少度[0,360]

    [6]:CCRotateBy::create("时间","角度");

        //几秒后旋转多少度[0,360]

    [7]:CCSkewTo::create("时间","x轴角度","y轴角度");

        //几秒后倾斜指定角度

    [8]:CCSkewBy::create("时间","x轴角度","y轴角度");

        //几秒后倾斜指定角度

    [9]:CCJumpTo::create("时间","目标位置","高度","到目标所需次数");

        //几秒后经过几次跳到指定位置

    [10]:CCJumpBy::create("时间","目标位置","高度","到目标所需次数");

        //几秒后经过几次跳到指定位置

    [11]:CCBezierTo::create("时间","ccBezierConfig构造体");

        //几秒内按指定贝塞尔曲线运动

    [12]:CCBezierBy::create("时间","ccBezierConfig构造体");

        //几秒内按指定贝塞尔曲线运动

    [13]:CCTintTo::create("时间","红","绿","蓝");

        //几秒后变为指定颜色

    [14]:CCTintBy::create("时间","红","绿","蓝");

        //几秒后变为指定颜色

    [15]:CCCardinalSplineTo::create("时间","控制点坐标数组","拟合度");

        //几秒内按曲线运动(拟合度0最柔和)

    [16]:CCCardinalSplineBy::create("时间","控制点坐标数组","拟合度");

        //几秒内按曲线运动(拟合度0最柔和)

    [17]:CCCatmullRomTo::create("时间","控制点坐标数组");

        //几秒内完成一个样条插值轨迹(直线)

    [18]:CCCatmullRomBy::create("时间","控制点坐标数组");

        //几秒内完成一个样条插值轨迹(直线)

    [19]:CCFadeIn::create("时间");

        //渐显

    [20]:CCFadeOut::create("时间");

        //渐消

    [21]:CCEaseBounceIn::create("action对象");

           //让目标动作具有反弹效果,从起点反弹

    [22]:CCEaseBounceOut::create("action对象");

        //让目标动作具有反弹效果,从终点反弹

    [23]:CCEaseBounceInOut::create("action对象");

        //让目标动作具有反弹效果,起点终点都反弹

    [24]:CCEaseBackIn::create("action对象");

        //让目标动作具有回力效果,起点作为回力点

    [25]:CCEaseBackOut::create("action对象");

        //让目标动作具有回力效果,终点作为回力点

    [26]:CCEaseBackInOut::create("action对象");

        //让目标动作具有回力效果,起点终点都作为回力点

    [27]:CCEaseElasticIn::create("action对象");

        //让目标动作具有弹力效果,起点具有弹性

    [28]:CCEaseElasticOut::create("action对象");

        //让目标动作具有弹力效果,终点具有弹性

    [29]:CCEaseElasticInOut::create("action对象");

        //让目标动作具有弹力效果,起点终点都具有弹性

    [30]:CCEaseExponentialIn::create("action对象");

        //让目标动作缓慢开始

    [31]:CCEaseExponentialOut::create("action对象");

        //让目标动作缓慢结束

    [32]:CCEaseExponentialInOut::create("action对象");

        //让目标动作缓慢开始并缓慢结束

    [33]:CCEaseSineIn::create("action对象");

        //让目标动作由慢到快

    [34]:CCEaseSineOut::create("action对象");

        //让目标动作由快到慢

    [35]:CCEaseSineInOut::create("action对象");

        //让目标动作由慢到快再到慢

    [36]:CCEaseRateAction::create("action对象","速度");

        //为目标动作设置速度

    [37]:CCSpeed::create("action对象","倍数");

        //为目标动作速度翻倍

    [38]:CCSpawn::create("action对象1","action对象2".....);

        //多个不同类动作同时执行(NUll结尾)

    [39]:CCSequence::create("action对象1","action对象2"......);

        //多个目标动作顺序执行(NUll结尾)

    [40]:CCBlink::create("时间","次数");

        //几秒内闪烁几次

    [41]:CCRepeat::create("action对象","次数");

        //重复目标动作

    [42]:CCRepeatForever::create("action对象");

        //永久重复目标动作

    [43]:CCDelayTime::create("时间");

        //延迟几秒执行(在顺序执行CCSequence中延迟哦)

    [44]:CCFollow::create("跟随对象","跟随范围");

        //镜头跟着目标走,超过范围就结束。

    [45]:CCOrbitCamera::create("时间","起始半径","半径差","起始z角","旋转z角","起始x角","旋转x角");

        //几秒内球面运动

    [46]:CCCallFunc::create("对象","回调函数");

        //创建一个回调动作(不带参数)

    [47]:CCCallFuncN::create("对象","回调函数");

        //创建一个回调动作(传调用者为参数)

    [48]:CCCallFuncND::create("对象","回调函数","任意参数");

        //创建一个回调动作(带2个参数)



    【三】:示例


    1.我们来创建一个项目Actiondemo

    2.加载一些图片用来做例子

    3.疯狂编码:


    Actiondemo.h


    1.我们写3个回调函数

    void funback1();

    void funback2(CCNode * node);

    void funback3(CCNode * node,void * a);



    Actiondemo.cpp


    1.加载两张图片进来作为精灵。



    2.每个方法都用一下



    CCSize mysize=CCDirector::sharedDirector()->getWinSize();

    //首先我们创建两个Sprite对象,我们来操控它

    CCSprite * sp1 = CCSprite::create("fp.png");

    CCSprite * sp2 = CCSprite::create("p.png");

    sp1->setPosition(ccp(100,mysize.height/2));

    sp2->setPosition(ccp(mysize.width-100,mysize.height/2-100));

    this->addChild(sp1);

    this->addChild(sp2);

    //创建一个CCMoveTo操作(给绝对地址)

    CCActionInterval * a1=CCMoveTo::create(5.0f,ccp(mysize.width-100,mysize.height/2));

    sp1->runAction(a1);

    //创建一个CCMoveBy操作(给相对地址)

    CCActionInterval * a2=CCMoveBy::create(5.0f,ccp(-300,0));

    sp2->runAction(a2);

    //sp2->runAction(a2->reverse());  这个会向相反的方向跑哦

    //创建一个CCScaleTo操作

    CCActionInterval * a3=CCScaleTo::create(5.0f,2);

    sp1->runAction(a3);

    //创建一个CCMoveBy操作

    CCActionInterval * a4=CCScaleBy::create(5.0f,0.5);

    sp2->runAction(a4);

    //创建一个CCRotateTo操作

    CCActionInterval * a5=CCRotateTo::create(5.0f,180);

    sp1->runAction(a5);

    //创建一个CCRotateBy操作

    CCActionInterval * a6=CCRotateBy::create(5.0f,180);

    sp2->runAction(a6);

    //创建一个CCSkewTo操作

    CCActionInterval * a7=CCSkewTo::create(5.0f,180,180);

    sp1->runAction(a7);

    //创建一个CCSkewBy操作

    CCActionInterval * a8=CCSkewBy::create(5.0f,180,180);

    sp2->runAction(a8);


    //创建一个CCJumpTo操作

    CCActionInterval * a9=CCJumpTo::create(5.0f,ccp(200,300),180,3);

    sp1->runAction(a9);

    //创建一个CCJumpBy操作

    CCActionInterval * a10=CCJumpBy::create(5.0f,ccp(200,300),180,3);

    sp2->runAction(a10);


    //创建CCBezier

    ccBezierConfig bezierconfig;

    bezierconfig.controlPoint_1=CCPointMake(200,100);

    bezierconfig.controlPoint_2=CCPointMake(300,200);

    bezierconfig.endPosition=CCPointMake(340,250);

    //创建一个CCBezierTo操作

    CCActionInterval * a11=CCBezierTo::create(5.0f,bezierconfig);

    sp1->runAction(a11);

    //创建一个CCBezierBy操作

    CCActionInterval * a12=CCBezierBy::create(5.0f,bezierconfig);

    sp2->runAction(a12);


    //创建一个CCTintTo操作

    CCActionInterval * a13=CCTintTo::create(5.0f,255,100,255);

    sp1->runAction(a13);

    //创建一个CCTintBy操作

    CCActionInterval * a14=CCTintBy::create(5.0f,150,0,150);

    sp2->runAction(a14);


    //创建point数组

    CCPointArray * pa=CCPointArray::create(5);

    pa->addControlPoint(ccp(100,10));

    pa->addControlPoint(ccp(200,250));

    pa->addControlPoint(ccp(110,180));

    pa->addControlPoint(ccp(300,100));

    pa->addControlPoint(ccp(200,280));

    //创建一个CCCardinalSplineTo操作

    CCActionInterval * a15=CCCardinalSplineTo::create(5.0f,pa,0);

    sp1->runAction(a15);

    //创建一个CCCardinalSplineBy操作

    CCActionInterval * a16=CCCardinalSplineBy::create(5.0f,pa,0);

    sp2->runAction(a16);


    //创建point数组

    CCPointArray * pa2=CCPointArray::create(5);

    pa2->addControlPoint(ccp(100,10));

    pa2->addControlPoint(ccp(200,250));

    pa2->addControlPoint(ccp(110,180));

    pa2->addControlPoint(ccp(300,100));

    pa2->addControlPoint(ccp(200,280));

    //创建一个CCCatmullRomTo操作

    CCActionInterval * a17=CCCatmullRomTo::create(5.0f,pa2);

    sp1->runAction(a17);

    //创建一个CCCatmullRomBy操作

    CCActionInterval * a18=CCCatmullRomBy::create(5.0f,pa2);

    sp2->runAction(a18);


    //创建一个CCFadeIn操作

    CCActionInterval * a19=CCFadeIn::create(5.0f);

    sp1->runAction(a19);

    //创建一个CCFadeOut操作

    CCActionInterval * a20=CCFadeOut::create(5.0f);

    sp2->runAction(a20);


    这里不要和上面的几个sp对象混了,记得把上面的注释掉。

    如果懒得动就去的我博客http://gl.paea.cn直接下载DEMO

    //创建4个CCMoveTo操作,1个CCScaleTo操作和三个精灵plan1,plan2,plan3

    CCSprite * plan1=CCSprite::create("fp.png");

    CCSprite * plan2=CCSprite::create("fp.png");

    CCSprite * plan3=CCSprite::create("fp.png");

    plan1->setPosition(ccp(100,mysize.height/2+100));

    plan2->setPosition(ccp(100,mysize.height/2));

    plan3->setPosition(ccp(100,mysize.height/2-100));

    this->addChild(plan1,1,500);

    this->addChild(plan2,1,501);

    this->addChild(plan3,1,502);

    CCActionInterval * ac1=CCMoveTo::create(5.0f,ccp(mysize.width-100,mysize.height/2+100));

    CCActionInterval * ac2=CCMoveTo::create(5.0f,ccp(mysize.width,mysize.height/2));

    CCActionInterval * ac3=CCMoveTo::create(5.0f,ccp(mysize.width-100,mysize.height/2-100));

    CCActionInterval * ac4=CCMoveTo::create(5.0f,ccp(mysize.width*2,mysize.height/2));

    CCActionInterval * ac5=CCScaleTo::create(5.0f,1.5f);


    //创建一个CCEaseBounceIn操作

    CCActionInterval * a21=CCEaseBounceIn::create(ac1);

    plan1->runAction(a21);

    //创建一个CCEaseBounceOut操作

    CCActionInterval * a22=CCEaseBounceOut::create(ac2);

    plan2->runAction(a22);

    //创建一个CCEaseBounceInOut操作

    CCActionInterval * a23=CCEaseBounceInOut::create(ac3);

    plan3->runAction(a23);


    //创建一个CCEaseBounceIn操作

    CCActionInterval * a24=CCEaseBounceIn::create(ac1);

    plan1->runAction(a24);

    //创建一个CCEaseBounceOut操作

    CCActionInterval * a25=CCEaseBounceOut::create(ac2);

    plan2->runAction(a25);

    //创建一个CCEaseBounceInOut操作

    CCActionInterval * a26=CCEaseBounceInOut::create(ac3);

    plan3->runAction(a26);


    //创建一个CCEaseBackIn操作

    CCActionInterval * a24=CCEaseBackIn::create(ac1);

    plan1->runAction(a24);

    //创建一个CCEaseBackOut操作

    CCActionInterval * a25=CCEaseBackOut::create(ac2);

    plan2->runAction(a25);

    //创建一个CCEaseBackInOut操作

    CCActionInterval * a26=CCEaseBackInOut::create(ac3);

    plan3->runAction(a26);


    //创建一个CCEaseElasticIn操作

    CCActionInterval * a27=CCEaseElasticIn::create(ac1);

    plan1->runAction(a27);

    //创建一个CCEaseElasticOut操作

    CCActionInterval * a28=CCEaseElasticOut::create(ac2);

    plan2->runAction(a28);

    //创建一个CCEaseElasticInOut操作

    CCActionInterval * a29=CCEaseElasticInOut::create(ac3);

    plan3->runAction(a29);


    //创建一个CCEaseExponentialIn操作

    CCActionInterval * a30=CCEaseExponentialIn::create(ac1);

    plan1->runAction(a30);

    //创建一个CCEaseExponentialOut操作

    CCActionInterval * a31=CCEaseExponentialOut::create(ac2);

    plan2->runAction(a31);

    //创建一个CCEaseExponentialInOut操作

    CCActionInterval * a32=CCEaseExponentialInOut::create(ac3);

    plan3->runAction(a32);


    //创建一个CCEaseSineIn操作

    CCActionInterval * a33=CCEaseSineIn::create(ac1);

    plan1->runAction(a33);

    //创建一个CCEaseSineOut操作

    CCActionInterval * a34=CCEaseSineOut::create(ac2);

    plan2->runAction(a34);

    //创建一个CCEaseSineInOut操作

    CCActionInterval * a35=CCEaseSineInOut::create(ac3);

    plan3->runAction(a35);


    //创建一个CCEaseRateAction操作

    CCActionInterval * a36=CCEaseRateAction::create(ac1,0.5);

    plan1->runAction(a36);


    //创建一个CCSpeed操作

    CCSpeed * a37=CCSpeed::create(ac2,30);

    plan2->runAction(a37);


    //创建一个CCSpawn操作

    CCFiniteTimeAction * a38=CCSpawn::create(ac3,ac5,NULL);

    plan3->runAction(a38);


    //创建一个CCSequence操作

    CCFiniteTimeAction * a39=CCSequence::create(ac1,ac2,ac5,NULL);

    plan3->runAction(a39);


    创建一个CCBlink操作

    CCActionInterval * a40=CCBlink::create(1,2);

    plan3->runAction(a40);


    //创建一个CCRepeat操作

    CCFiniteTimeAction * a41=CCRepeat::create(a40,2);

    plan3->runAction(a41);


    //创建一个CCRepeatForever操作

    CCFiniteTimeAction * a42=CCRepeatForever::create(a40);

    plan3->runAction(a42);


    //创建一个CCDelayTime操作,在顺序执行中延迟哦

    CCActionInterval * a43=CCDelayTime::create(2);

    CCFiniteTimeAction * a433=CCSequence::create(ac1,a43,ac5,NULL);

    plan3->runAction(a433);


    //创建一个CCFollow操作

    //CCRectMake(x,y,宽,高)

    //创建背景参照物

    CCSprite * czsp=CCSprite::create("HelloWorld.png");

    czsp->setPosition(ccp(mysize.width/2,mysize.height/2));

    this->addChild(czsp,-1);

    plan2->runAction(ac4);

    CCFollow * a44=CCFollow::create(plan2,CCRectMake(0,0,960,320));

    this->runAction(a44);


    //创建一个CCOrbitCamera操作

    CCActionInterval * a45=CCOrbitCamera::create(5,100,50,0,180,0,90);

    plan3->runAction(a45);


    //创建一个CCCallFunc操作

    //还要实现回调里的操作,看下面的回调函数funback1

    CCCallFunc * back1=CCCallFunc::create(this,callfunc_selector(Actiondemo::funback1));

    CCFiniteTimeAction * cq1=CCSequence::create(ac1,back1,NULL);

    plan1->runAction(cq1);


    //创建一个CCCallFuncN操作

    CCCallFuncN * back2=CCCallFuncN::create(this,callfuncN_selector(Actiondemo::funback2));

    CCFiniteTimeAction * cq2=CCSequence::create(ac1,back2,NULL);

    plan1->runAction(cq2);


    //创建一个CCCallFuncND操作

    CCCallFuncND * back3=CCCallFuncND::create(this,callfuncND_selector(Actiondemo::funback3),(void *)10);

    CCFiniteTimeAction * cq3=CCSequence::create(ac1,back3,NULL);

    plan1->runAction(cq3);




    3.先实现3个回调函数


    这里说一下CCNode。

    任何一个能被绘制或者包含能被绘制的东西都是一个CCNode。

    最常用的CCNode有:CCScene,CCLayer,CCSprite,CCMenu.

    一个CCNode的主要特性包括:

    1.他们能够容纳别的CCNode节点,比如能addChild, getChildByTag, removeChild 。

    2.他们能定期的调度回调函数,比如能schedule,unschedule等。

    3.他们能执行动作,比如runAciton,stopAction等。

    一些节点能给自己或他们的子几点提供一些额外额功能。

    所以这里我们回调函数funback2中node就等于plan1,可以直接调用


    如果用不好就去的我博客http://gl.paea.cn直接下载DEMO

    void Actiondemo::funback1(){

    CCSprite * sp=(CCSprite *)this->getChildByTag(500);

    CCActionInterval * rote=CCRotateTo::create(5.0f,180);

    sp->runAction(rote);

    }

    void Actiondemo::funback2(CCNode * node){

    CCActionInterval * rote=CCRotateTo::create(5.0f,180);

    node->runAction(rote);

    }

    void Actiondemo::funback3(CCNode * node,void * a){

    int num=(int)a; //这里要引用下指针

    CCActionInterval * rote=CCRotateTo::create(num,180);

    node->runAction(rote);

    }



           好了,随便给显示几个例子吧。




    本节DEMO下载


    转载请注明出处:http://gl.paea.cn/contents/fdb2fb923944b2e6.html

  • 相关阅读:
    PHP 5.5.0 Alpha5 发布
    Ubuntu Touch 只是另一个 Android 皮肤?
    MariaDB 10 已经为动态列提供文档说明
    Percona Toolkit 2.1.9 发布,MySQL 管理工具
    Oracle Linux 6.4 发布
    Ruby 2.0.0 首个稳定版本(p0)发布
    Apache Pig 0.11.0 发布,大规模数据分析
    Node.js 0.8.21 稳定版发布
    红薯 MySQL 5.5 和 5.6 默认参数值的差异
    Django 1.5 正式版发布,支持 Python 3
  • 原文地址:https://www.cnblogs.com/Anzhongliu/p/6091984.html
Copyright © 2011-2022 走看看