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