Cocos2d-x属性变化动作
属性变化动作,即运动动作的过程中会改变节点对应属性的动作,它们大概有如下几种。
1.MoveTo和MoveBy
Move动作使节点做直线运动,通常用来移动游戏内的角色等,其函数原型如下:
static MoveTo* create(float duration, const Vec2& position);
static MoveBy* create(float duration, const Vec2& deltaPosition);
其中,参数duration为持续时间,position(deltaPosition)是Vec2类型的值。实例如下:
//用时1秒,将节点移动到屏幕(125,80)的位置
auto moveTo = MoveTo::create(1,Vec2(125,80));
//用时1秒,节点相对当前坐标,X轴向左移动88,Y轴向上移动99
auto moveBy = MoveBy::create(1,Vec2(-88,99));
2.JumpTo和JumpBy
Jump动作以一定的轨迹让节点跳跃到指定的位置,其API如下:
static JumpTo* create(float duration, const Vec2& position, float height, int jumps);
static JumpBy* create(float duration, const Vec2& position, float height, int jumps);
可以发现,形参中也有position,类型为Vec2类型的值。height为跳跃高度,jumps为跳跃次数。示例如下:
//1秒时间,跳到(100,86)的位置,跳跃高度为50像素,总共跳跃次数为4次
auto jumpTo = JumpTo::create(1,Vec(100,86),50,4);
//1秒时间,原地跳跃,跳跃高度为100像素,总共跳跃4次
auto jumpBy = JumpBy::create(1,Vec2(0,0),100,4);
3.BezierTo和BezierBy
Bezier动作可以让节点做曲线运动,而曲线则由贝塞尔曲线描述。贝塞尔曲线又称贝兹曲线或贝济埃曲线,是应用于二位图形应用程序的数学曲线。
每条贝塞尔曲线都包含一个起点和一个终点。在一条曲线中,起点和终点各自包含一个控制点,而控制点到起点(或终点)的连接称作控制线,所以每条贝塞尔曲线应该有两条控制线和两个控制点。控制点和起点(或终点)的角度以及长度决定了曲线的形状。
Bezier动作的API如下:
static BezierBy* create(float t, const ccBezierConfig& c);
static BezierTo* create(float t, const ccBezierConfig& c);
//ccBezierConfig结构体的结构
typedef struct _ccBezierConfig {
//! end position of the bezier
Vec2 endPosition;
//! Bezier control point 1
Vec2 controlPoint_1;
//! Bezier control point 2
Vec2 controlPoint_2;
} ccBezierConfig;
其中,ccBezierConfig结构体为贝塞尔曲线的描述信息,它用于处理三个点的坐标,分别是起点控制点、终点控制点、终点。因此当我们需要创建一个Bezier动作时,应该先配置好贝塞尔曲线的描述信息。就像下面示例:
ccBezierConfig controlPointTo;//创建ccBezierConfig结构体
controlPointTo.controlPoint_1.set(Director::getInstance()->getVisibleOrigin().x + 960, Director::getInstance()->getVisibleOrigin().y + 50);//起点控制点
controlPointTo.controlPoint_2.set(Director::getInstance()->getVisibleOrigin().x + 700, Director::getInstance()->getVisibleOrigin().y + 0);//终点控制点
controlPointTo.endPosition.set(Director::getInstance()->getVisibleOrigin().x + 620, Director::getInstance()->getVisibleOrigin().y + 14);//终点
auto carrotBezierTo = BezierTo::create(1, controlPointTo);//1秒内运动
实际上,在Adobe Photoshop中,钢笔工具就是贝塞尔曲线的应用。所以,在开发中,我们可以利用Adobe Photoshop的钢笔工具调出贝塞尔曲线,然后将参数搬到代码中,即可得到我们想要的Bezier动作。
4.其它
- ScaleTo和ScaleBy,可以让节点在指定时间内进行缩放。
- RotateTo和RotateBy,用于节点旋转。