[Cocos2D-X] Cocos2D-X TestCPP 详解(一)Action 上

Cocos2D-X TestCPP详解(一)Action 上

    之前写的博文没有系统的介绍一系列的知识。今天,听了号哥的知道建议后,收获颇深。既然现在好多同学刚刚接触 Cocos2D-X ,也寻求一些好的教材。那么 Cocos2D-X 最好的教材就是自带的TestCPP 莫属了。自己也会坚持把 TestCPP 这一系列的博文写好。让新手可以当作教材,高手可以当作中文的API来看。

    好了,闲话少说。我们运行 TestCPP 后,排列在第一个的就是游戏中常用的 Action 咯。由于,Action部分内容过多,今天我们先来介绍一部分。

PS:由于之前一直用的是2.0.4,被人说太老了,所以使用了最新的2.1.3。

    首先,我们打开 TestCPP 工程中 ActionsCPP 筛选器。AcionsTest的cpp就在大家眼中了。
    我们打开ActionsTest.cpp 会发现其中有很多代码。但,我们今天主要来介绍的是 Action 。 其他的就先不介绍了。我们发现 TestCPP 中 ActionsTest 第一个Action UI 上有一串文字。     就是图中的红框标记处。这个位置所显示的内容,我们后面需要用到,注意一下。

    好了,需要注意的地方我们知道了。下面我们就在 VS2010 中搜索红框标记的文字把。
    我们搜索到了上面的代码,这就是当前显示的 Action 所在的类,TestCPP 把 ActionsTest 里面用到的都写在一个CPP 中了,也方便我们查看咯。
    
    所用的代码会在他的 OnEnter 方法中。后面就尽量少上图了,就按照之前的方式来查找。
    
Manual Transformation:
     
        m_tamara->setScaleX( 2.5f);
        m_tamara->setScaleY( -1.0f);
        m_tamara->setPosition( ccp(100,70) );
        m_tamara->setOpacity( 180);//设置透明度0-255

        m_grossini->setRotation( 120); //旋转0以上向右
        m_grossini->setPosition( ccp(s.width/2, s.height/2));
        m_grossini->setColor( ccc3( 255,0,0)); //设置精灵颜色

        m_kathia->setPosition( ccp(s.width-100, s.height/2));
        m_kathia->setColor( ccBLUE); //设置颜色蓝色
    我们看到了,有三个对象:m_tamara、m_grossini、m_kathia。这三个精灵分别代表那三个小人。

    m_tamara 就是那个眼镜妞,我们叫她 Tamara。
    m_grossini 就是那个秃瓢,我们叫他 Grossini。
    m_kathia 就是那个黑妞了,我们叫他 Kathia。

    这里,我们只对他们三个进行了一些变色、设置位置的操作,无关 Action ,所以不过多介绍。

MoveTo / MoveBy: 移动

  CCActionInterval* actionTo = CCMoveTo::create(2, ccp(s.width-40, s.height-40));
  CCActionInterval* actionBy = CCMoveBy::create(2, ccp(80,80));
  CCActionInterval* actionByBack = actionBy->reverse();
  m_tamara->runAction( actionTo);
  m_grossini->runAction( CCSequence::create(actionBy, actionByBack, NULL));
  m_kathia->runAction(CCMoveTo::create(1, ccp(40,40)));
    
    CCMoveTo::create 参数1:执行时间 参数2:目标点
    CCMoveBy::create 参数1:执行时间 参数2:移动座标点
    
    我们看到这里有两个动作,CCMoveTo、CCMoveBy,这两个动作从字面上很难分开,而后的动作很多也是如此命名。CCMoveTo 是移动到指定座标点。而 CCMoveBy 呢,是以当前的座标点为基础,在此之上移动。CCMoveTo 最终是替换了座标,而 CCMoveBy 是把你提供的座标与原座标相加。
    runAction 创建好一个动作之后,必须要让精灵来 runAction ,否则它是不会执行这个动作的哦。
    CCSequence 这是一个动作序列,当你想让精灵来执行一系列动作的时候来使用它,精灵会安照参数的顺序来执行你所提供的动作,当然你要以NULL来当参数的末尾。

RotateTo / RotateBy: 旋转

  CCActionInterval*    actionTo = CCRotateTo::create( 2, 45);  
  CCActionInterval*    actionTo2 = CCRotateTo::create( 2, -45);
  CCActionInterval*    actionTo0 = CCRotateTo::create(2 , 0);
  m_tamara->runAction( CCSequence::create(actionTo, actionTo0, NULL));
  CCActionInterval*    actionBy = CCRotateBy::create(2 ,    360);
  CCActionInterval*    actionByBack = actionBy->reverse();

    CCRotateTo::create 参数1:执行时间 参数2:旋转角度
    CCRotateBy::create 参数1:执行时间 参数2:旋转角度

    这里新出现了一个函数就是 actionBy->reverse 这个函数功能就是反转你 actionBy的动作,例如:actionBy 旋转了60度,那么actionBy->reverse就是一个旋转-60度的动作,会让精灵回到执行这个动作之前的状态。

ScaleTo / ScaleBy: 缩放、扩大 

  CCActionInterval*    actionTo = CCScaleTo::create(2.0f, 0.5f);
  CCActionInterval*    actionBy = CCScaleBy::create(2.0f, 1.0f, 10.0f);

    CCScaleTo::create 参数1:执行时间 参数2:缩放比例
    CCScaleTo::create 参数1:执行时间 参数2:X轴缩放比例 参数3:Y轴缩放比例
    CCScaleBy::create 参数1:执行时间 参数2:缩放比例

SkewTo / SkewBy: 倾斜 (不知如何描述,自己看把。)

  CCActionInterval *actionTo = CCSkewTo::create(2, 37.2f, -37.2f);
  CCActionInterval *actionToBack = CCSkewTo::create(2, 0, 0);

    CCSkewTo::create 参数1:执行时间 参数2:X轴程度 参数3:Y轴程度 
    CCSkewBy::create 参数1:执行时间 参数2:X轴程度 参数3:Y轴程度 

RotationalSkewTo / RotationalSkewBy: 旋转倾斜

  CCRotateTo* actionTo = CCRotateTo::create(2, 37.2f, -37.2f);
  CCRotateBy* actionBy = CCRotateBy::create(2, 0.0f, -90.0f);

Skew Comparison:歪斜(歪斜Layer)

  CCSkewBy* actionTo = CCSkewBy::create(2, 360, 0);
  CCSkewBy* actionToBack = CCSkewBy::create(2, -360, 0);

Skew + Rotate + Scale: 同时进行多个动作

  box->runAction(CCSequence::create(actionTo, actionToBack, NULL));
  box->runAction(CCSequence::create(rotateTo, rotateToBack, NULL));
  box->runAction(CCSequence::create(actionScaleTo, actionScaleToBack, NULL));
 
    我们发现,前面我们都是执行一个 动作/动作序列。这里我们同时执行了三个动作序列。这样是可行的,不信你注释下代码试试~ 这三个动作序列会同步进行。

JumpTo / JumpBy:跳跃

  CCActionInterval*    actionTo = CCJumpTo::create(2, ccp(300,300), 50, 4);
  CCActionInterval*    actionBy = CCJumpBy::create(2, ccp(300,0), 50, 4);
  m_kathia->runAction( CCRepeatForever::create(actionUp));

    CCJumpTo::create
      参数1:时间 参数2:目标点 参数3:最高跳跃高度 参数4:跳跃次数
    CCJumpBy::create
      参数1:时间 参数2:移动点 参数3:最高跳跃高度 参数4:跳跃次数
    
    这里我们发现CCRepeatForever::create 它会使当作参数的动作无限进行,每次执行完后又从第一个开始,像一些比较欢乐蹦达的NPC就可以用这个来做咯。

    好了,今天就介绍到这里,Action的东西可不是一般的多。下次我会从贝塞尔曲线移动那块来介绍,下次见。
    CocoStudio 讨论学习群:141444261
    Cocos2D-X  讨论学习群:244959010
更新!
Cocos2D-X TestCPP 详解(一)Action 上
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章