评论

收藏

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

游戏开发 游戏开发 发布于:2021-06-27 15:32 | 阅读数:347 | 评论:0

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 上http://502317120.blog.51cto.com/4062300/1194396