Cocos中定义了一系列基本动作,可以方便我们制作简单的效果。
本文仅供个人记录和复习,不用于其他用途
3.x版本变化
- 去掉
CC
- 更新了一些动作
CallFunc
有了新用法,具体请看回调函数一章
CCAction
CCAction
只是一个基类,它的派生类才是我们实际使用的动作。派生类如下:
CCFiniteTimeAction
:与时间相关的动作类CCFollow
:跟随动作类CCSpeed
:速度类
动作管理
下面是一些常见操作,适用于所有的动作:
|
|
下面将分别介绍三个类各自的操作。
时间动作类CCFiniteTimeAction
CCFiniteTimeAction
又分为CCActionInstant
(瞬时动作)和CCActionInterval
(持续动作)两个子类。
瞬时动作CCActionInstant
常见操作如下:
|
|
使用举例:
|
|
函数回调动作CCCallFunc
CCCallFunc
是瞬时动作CCActionInstant
的子类。它主要有三种函数回调动作类。三种函数回调的区别在于所带的参数个数:0、1、2。CCActionInstant
在执行动作时,会调用这个函数。
|
|
使用举例:
|
|
持续动作CCActionInterval
常见操作如下:
|
|
使用举例:
|
|
组合动作
组合动作的类是CCActionInterval
的子类,主要分为序列动作和重复动作。
|
|
使用举例:
|
|
延迟动作CCDelayTime
CCDelayTime
是CCActionInterval
的子类,用于序列CCSequence
中,在两个动作之间加上一个等待时间。
|
|
缓动动作CCActionEase
CCActionEase
也是CCActionInterval
的子类,也是缓动动作的基类。这类动作在执行时速度可以变化,比如直线运动可以先加速再减速,又或者是自由落体运动是越来越快的,但是我们用的更多的是EaseRateAction
类,该类继承了CCActionEase
。
缓动动作的速度可以分为以下三种:
In
:由慢变快Out
:由快变慢InOut
:由慢变快再变慢
需要注意的是,CCActionEase
只能够改变某个持续动作执行时的速度,但是这个动作的时间是不会变的。由于这个类的具体实现比较复杂,这里只简单地举几个例子。
|
|
速度类CCSpeed
CCSpeed
继承自CCAction
,用于改变动作执行的速度。但不同于CCActionEase
,动作执行的时间也会随着改变,也相当于一般意义上的加速。
|
|
跟随动作类CCFollow
CCFollow
继承自CCAction
,它能够让某个CCNode
对象跟随另外一个对象移动。就好比我们在玩超级马里奥时,我们控制人物向前走,背景也会跟着显示前面的内容,而不是让我们的马里奥走到屏幕外面去。
使用方法:
|
|
综合运用
下面将结合几种常用动作,以及碰撞检测的知识,来做一个小的样例。
|
|
上面是init()
方法以及定时器的update()
方法的实现。这里我们创建了两个精灵,一个是英雄,一个是仙豆。那么,我们先让英雄以较慢的速度向右移动,当触碰到线仙豆时,英雄的速度加快。关于碰撞检测的实现,请看下面这张图:
由于英雄的boundingBox()
过大,所以我们只能够自定义一个矩形。origin
代表着hero的
boundingBox的当前坐标(Rect左上角为原点),origin.x
加50代表着矩形向右移动了50。当然,宽度我们必须减去100,不然的话就会提前碰到敌人。注意,size.width
在减时是两边同时减,在这里就是左右两边同时减50。当然,由于矩形锚点在左上角,所以看起来只是右边减去了100。
效果如下:
我们会发现一点,hero
不仅执行了动作,同时还执行了动画。runAction()
可以同时运行动作和动画,但是不能同时运行两个动作或者两个动画。