Cocos2dx 动作类-Action

本文详细介绍了Cocos2dx中的动作系统,包括Action类及其子类的使用方法,如Speed、Follow和FiniteTimeAction等,并列举了多种具体的动作创建实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值