Cocos2d-x学习笔记(7)

来源:互联网 发布:企业数据安全管理 编辑:程序博客网 时间:2024/06/03 07:28

        1、动作基本概念

        CCActiong是动作类的基类,动作作用于CCNode,因此,任何一个动作都需要CCNode对象来执行。CCAction作为一个基类,其实质是一个接口(抽象类),由它派生的实现类才是实际使用的动作。CCAction的绝大多数实现类都派生自CCFiniteTimeAction,这个类定义了在规定的时间内完成的动作。CCFiniteTimeAction定义了reverse方法,通过这个方法可以获得一个与原来动作相反的动作,称为你动作,如:隐藏一个精灵后用逆动作再显示出来。

        2、瞬时动作

        CCFiniteTimeAction中动作持续时间为0的特例,下面介绍一些常用的瞬时动作:

        (1)CCPlace该动作用于将节点放置到某个指定位置,其作用与修改节点的Position属性相同。

        (2)CCFlipX和CCFlipY:这两个动作分别作用于将精灵沿X轴和Y轴反向显示,其作用与设置精灵的FlipX和FlipY属性相同。

        (3)CCShow和CCHide:这两个动作分别用于显示和隐藏节点,其作用与设置节点的Visible属性一样。

        (4)CCCallFunc:系列动作包括CCCallFunc、CCCallFuncN、CCCallFuncND、CCCallFuncO四个动作,用来在动作中进行方法的调用,只能调用某个类中的实例方法,而不能调用普通的C函数。  

        CCCallFunc调用的方法不包含参数,CCCallFuncN调用的方法包含一个CCNode*类型的参数,表示执行动作的对象。CCCallFuncND调用方法包含两个参数,不仅有一个节点参数,还有一个自定义参数(CCNode*与void*)。CCCallFuncO调用的方法则只包含一个CCObject*类型的参数。

        3、持续性动作:在持续的一段时间里逐渐完成的动作。大多数持续性动作都会有一个用户控制动作执行时间的实型参数duration

        每一个持续性动作通常都存在两个不同的变种动作,分别具有To和By后缀:后缀为To的动作描述了节点属性值的绝对变化,如CCMoveTo将对象移动到一个特定的位置。后缀为By的动作则描述了属性值相对变化,如CCMoveBy将对象移动一段相对位移。动作划分:(1)位置变化动作;(2)属性变化动作;(3)视觉特效动作;(4)控制动作。

        (1)位置变化动作:提供3种位置变化动作类型。

        a、CCMoveTo和CCMoveBy:节点做直线运动,设置了动作时间和终点位置后,节点就会在规定的时间内,从当前位置直线移动到设置的终点位置。他们初始化方法分别为:

       CCMoveTo::create(CCTime duration,CCPoint& pos);

       CCMoveBy::create(CCTime duration,CCPoint& pos);

        duration参数表示动作持续的时间,pos参数表示移动的终点或距离,对于CCMoveTo,节点会被移动到pos相应的位置,对于CCMoveBy,节点会相对之前的位置移动pos的距离。

        b、CCJumpTo和CCJumpBy:节点以一定的轨迹跳到指定位置,他们初始化的方法如下:

        CCJumpTo::create(CCTime duration,CCPoint& pos,float height,int jumps)//pos表示跳跃的终点或距离,height表示最大高度,jumps表示跳跃的次数。

        CCJumpBy::create(CCTime duration,CCPoint& pos,float height,int jumps)

        c、CCBezierTo和CCBezierBy:使节点曲线运动,运动的轨迹由贝塞尔曲线描述。

        每一条贝塞尔曲线都包含一个起点和一个终点,在一条曲线中,起点和终点都各自包含一个控制点,而控制点到端点的连线称作控制线,控制线决定了从端点发出的曲线的形状,包含角度和长度两个参数,角度决定了它所控制的曲线的方向,即这段曲线在这控制点的切线方向,长度控制曲线的曲率,控制线越长,它所控制的曲线离控制线越近。使用时我们先要创建ccBezierConfig结构体,设置好终点endPosition以及两个控制点controlPoint_1和controlPoint_2,在把结构体传入CCBezierTo或CCBezierBy的初始化方法中,如:ccBezierConfig  bezier;bezier.controlPoint_1 = ccp(20,150);bezier.controlPoint_2 = ccp(200,30);bezier.endPosition = ccp(160,30);CCFiniteTimeAction *beizerAction = CCBezierTo::create(actualDuration/4,bezier);

      (2)属性动作变化:通过属性值的逐渐变化实现动画效果。如CCScaleTo,它会在一段时间内不断的改变游戏元素的scale属性。

        a、CCScaTo与CCScaleBy:产生缩放效果,使节点的缩放系数随时间线性变化,其初始化方法为:

        CCScaleTo::create(ccTime duration,float s);s为缩放系数的最终值或变化量

        CCScaleBy::create(ccTime duration,float s);

        b、CCRotateTo与CCRotateBy:产生旋转效果,初始化方法如下:

        CCRotateTo::create(ccTime duration,float fDeltaAngle);//fDeltaAngle的单位是角度,正方向为顺时针方向。

        CCRotateBy::create(ccTime duration,float fDeltaAngle);

        c、CCFadeIn与CCFadeOut:产生淡入淡出效果

        CCFadeIn::create(ccTime duration);

        CCFadeOut::create(ccTime duration);

        d、CCFadeTo:设置一段时间内透明度的变化效果。初始化方法为:

        CCFadeTo::create(ccTime duration,Glubyte opacity);//Glubyte是8位无符号整数,因此,opacity取0-255中的任意整数,与透明度相关的动作只能应用在精灵上,且子节点不会受到父节点的影响。

        f、CCTinitTo与CCTinitBy:设置色调变化,这个动作较为少用,初始化为:

        CCTinitTo::create(ccTime duration,Glubyte r,Glubyte g,Glubyte b);

        CCTinitBy::create(float duration,GLshort deltaRed,GLshort deltaGreen,GLshort deltaBlue);

        (3)视觉特效动作:实现一些特殊的视觉效果。

        a、CCBlink:使目标节点闪烁,初始化为:CCBlink::create(ccTime duration,unsigned int uBlicks);//uBlicks:闪烁次数

        b、CCAnimation:播放帧动画,用帧动画的形式实现动画效果。

        (4)控制动作:对动作进行精细控制,包括:CCDelayTime(对动作延时一定的时间)、CCRepeat(把动作重复一定次数)、CCRepeatForever(动作不断的重复下去)等。

       

0 0
原创粉丝点击