Cocos2dx 动作类-Action

    xiaoxiao2022-06-28  18

    经过前几个篇章对基础知识的梳理,再加上自身所学知识,相信对搭建出一些简单场景已经是信手捏来。但是只用到之前的知识搭造的场景基本都是静态的。但为了控制游戏人物做出移动、跳跃、旋转等动作,Action类是必不可少的。

    Action类的方法介绍:

    virtual std::string description() 获取动作的描述信息字符串。

    virtual Action* clone() 获取这动作的克隆对象。

    virtual Action* reverse() 获取这动作的相反对象(如向左转90度的动作 相反动作则是向右转90度)。

    virtual bool isDone() 获取动作是否之行结束,若结束返回true。

    Node* getTarget() 获取动作的目标节点。

    void setTarget(Node * target) 设置动作的目标节点。

    int getTag() 获取标签。

    void setTag(int tag) 设置动作标签。

    那么Action类该怎么使用?

    详细看过节点类Node篇的应该对node->runAction(Aciton * action);这个方法不陌生,这个就是节点执行动作的方法。

    以精灵做例子:

    sprite->runAction(action); // 精灵sprite执行一个名叫action的动作

    但是Action类是动作的基类,具体动作要通过其子类实现。

    Cocos2dx中的各种动作都是继承自相同一个类Action,虽然实际开发中并不会直接用到Action,不过会经常使用它的子类对象。以下是动作类的继承树。

    从继承树中不难看出Action动作类被分为3个子类:分别是Speed、FiniteTimeAction、Follow。

    一、Speed动作

    用于线性地改变某个动作的速度,因此可以实现倍数的快慢放功能。

    通常用来实现改变节点动作的快慢。

    二、Follow动作

    用于一个节点跟随另一个节点做运动,可以实现摄像机跟拍等功能。

    如精灵移动的同时,整个游戏层跟随移动,使得精灵对于镜头的位置不变等。

    三、FiniteTimeAction最重要的基本动作相关类,其中又分成了两个种类的动作。

    1、ActionInterval类

    代表有变化的过程动作(可以看出普遍动作都有时间参数),以下创建的子类都是ActionInterval类的子类,相关子类创建实例的方法有:

    ①与移动相关:

    static MoveBy* create(float duration,const Point& deltaPosition)  //创建一个相对位置移动动作对象,参数一是持续时间,参数二是位移量。

    static MoveTo* create(float duration,const Point& position)  //创建一个绝对位置移动动作对象,参数一是持续时间,参数二是目标位置

    static JumpBy* create(float duration,const Point& position,float height,int jumps) //创建一个相对跳跃动作对象,参数一是持续时间,参数二是位移量,参数三是每次跳跃高度,参数四为跳跃次数。

    static JumpTo* create(float duration,const Point& position,float height,int jumps)创建一个相  //绝对跃动作对象,参数一是持续时间,参数二是目标位置,参数三是每次跳跃高度,参数四为跳跃次数。

    stattic BezierBy* create(float t,const ccBezierConfig& c)  //创建一个相对赛贝尔曲线移动的动作对象,参数一是持续时间,参数二是曲线相关信息。

    stattic BezierTo* create(float t,const ccBezierConfig& c) //创建一个相对赛贝尔曲线移动的动作对象,参数一是持续时间,参数二是曲线相关信息。

    ②与图形变换相关:

    static RotateTo* create(float duration,float deltaAngleX,float deltaAngleY)  //创建一个旋转动作,参数一是持续时间,参数二为绕X轴旋角度,参数三为绕Y轴旋转角度。

    static RotateTo* create(float duration,float deltaAngle)  //创建一个绝对旋转动作,参数一是持续时间,参数二为平面旋转到的目标角度。

    static RotateBy* create(float duration,float deltaAngle)  //创建一个相对旋转动作,参数一是持续时间,参数二是平面旋转角度。

    static RotateBy* create(float duration,float deltaAngleZ_X,float deltaAngle Z_Y)  //创建旋转动作对象,参数一是时间,参数二是Z轴和X轴中间的旋转角度,参数三是Z轴与Y轴的旋转角度。

    stattic RotateBy* create(float duration,const Vertex3F& deltaAngle3D) //创建一个旋转动作对象,参数一是持续时间,参数二是一个三维向量,三个分量表示绕3个坐标轴的旋转角度。

    static SkewTo* create(float t, float sx, float sy)  //创建一个绝对偏斜动作对象,参数一是持续时间,参数二是X方向目标偏斜值,参数三是Y方向目标偏斜值。

    static SkewBy* create(float t, float deltaSkewX, float deltaskewY) //创建一个相对偏斜动作对象,参数一是持续时间,参数二是X方向偏斜值增量,参数三是Y方向偏斜值增量。

    static ScaleTo* create(float duration, float s) //创建一个绝对缩放对象,参数一是持续时间,参数二是目标缩放因子。

    static ScaleTo* create(float duration,floatsx,floatsy)  //创建一个绝对缩放对象,参数一是持续对象,参数二是目标缩放X方向因子,参数三是目标缩放Y方向因子。

    static ScaleBy* create(float duration, float s) //创建一个相对缩放对象,参数一是持续时间,参数二是缩放因子增量。

    static ScaleBy* create(float duration,floatsx,floatsy)  //创建一个相对缩放对象,参数一是持续对象,参数二是缩放X方向因子增量,参数三是缩放Y方向因子增量。

    static Blink* create(float duration,int blinks)  //创建一个闪烁动作对象,参数一是持续时间,参数二是闪烁次数。

    ③与颜色有关:

    static FadeOut* create(float d) //创建一个淡出动作的对象,d参数表示完全淡出所需时间。

    static FadeIn* create(float d) //创建一个淡入动作的对象,d参数表示完全淡入所需时间。

    static FadeTo* create(float duration,GLubyte opactiy) //创建一个绝对透明度变化动作的对象,参数一是持续时间,参数二是目标透明度值。

    static TintTo* create(float duration,GLubyte red,GLubyte green,GLubyte blue) //创建一个从当前颜色变化到制定色彩的动作对象,参数一是持续时间,其余参数分辨对应目标颜色的RGB通道值。

    static TintBy* create(float duration,GLubytedeltaRed,GLubyte deltaGreen,GLubytedeltaBlue) //创建一个从当前颜色变化到制定色彩的动作对象,参数一是持续时间,其余参数分辨对应目标颜色的RGB通道增量

    2、ActionInstant

    代表没过程的动作(所有动作都没有时间参数),直接打到最终效果的动作,以下创建的子类都是ActionInstant类的子类,相关子类创建实例的方法有:

    static Hide * create() //创建一个隐藏动作对象。

    static Show * create() //创建一个显示动作对象。

    static ToggleVisibility * create() // 创建一个切换可见性的动作对象(原来可见变不可见,原来不可见变可见)。

    static FlipX* create(bool x) //创建一个绕X轴翻转的动作,当参数为true时翻转。

    static FlipY* create(bool x) //创建一个绕Y轴翻转的动作,同上。

    static Place  * create(const Point& pos)  //创建一个重置位置的对象,pos表示位置坐标。

    static RemoveSelf * create(bool isNeedCleanUp=true)  //创建一个删除自身的动作对象,为true时清楚目标节点的所有动作和回调。

    3、组合动作类

    这个类不是直接继承FiniteTimeAction,而是ActionInterval的子类,它们的功能是把其他动作组合使用,相关子类有:

    static Sequence* create(FiniteTimeAction * action1,......)  //创建一个顺序执行动作对象,参数是FiniteTimeAction实例,可以插入多个参数,最后必须防止NULL参数作结尾。

    static Sequence* create(const Vector<FiniteTimeAction * >& arrayOfActions) //同上,参数是放置多个动作的容器。

    static Sequence* createWithVariableList(FiniteTimeAction* action1,va_list args) //同上,参数一是指向一个动作序列头部的指针,参数二是变长参数。

    static Sequence* createWithTwoActions(FiniteTimeAction* action1,FiniteTimeAction* action2)//创建两个动作组成的顺序动作对象。

    static Repeat* create(FiniteTimeAction* action,unsigned int times) //创建一个重复动作对象,参数一是要重复的动作,参数二是重复次数。

    static RepeatForever* create(FiniteTimeAction* action) //创建一个无限次重复对象。

    static Spawn* create(FiniteTimeAction* action1,......) //创建一个多个动作同步执行动作,参数是FiniteTimeAction实例,可以插入多个参数,最后必须防止NULL参数作结尾。

    static Spawn* create(const Vector<FiniteTimeAction * >& arrayOfActions) //同上,参数是放置多个动作的容器。

    static Spawn* createWithVariableList(FiniteTimeAction* action1,va_list args) //同上,参数一是指向一个动作序列头部的指针,参数二是变长参数。

    static Spawn* createWithTwoActions(FiniteTimeAction* action1,FiniteTimeAction* action2)//创建两个动作组成的同时动作对象。

    4、动画类-Animate

    用来播放帧动画的动作类,在下篇文章里会详细说明。

    转载请注明原文地址: https://ju.6miu.com/read-1124292.html

    最新回复(0)