动作Action

时间:2023-03-09 00:44:55
动作Action
    /**
* DelayTime延迟
* @param d Duration 延迟时间
*/
auto delayTime = DelayTime::create();
sprite->runAction(delayTime); /**
MoveTo 移动
@param duration 时长
@param position 移动到的位置
*/
auto *moveto = MoveTo::create(1.2f, Vec2(, ));
sprite->runAction(moveto);
/**
MoveBy 移动的距离
@param duration 时长
@param position 移动的距离, 从起始位置移动(100, 200)的位移
*/
auto *moveBy = MoveBy::create(1.2f, Vec2(, ));
sprite->runAction(moveBy); /**
* ScaleTo x, y, z轴按比例缩放 对应于ScaleBy
* @param duration 动作时长
* @param x比例
* @param y比例
* @param z比例
*/
auto *scaleTo = ScaleTo::create(1.2f, 2.0, 0.5, 2.0);
sprite->runAction(scaleTo); /**
RotateTo旋转, 如果是3D, 需要参数Vec3, 表示x, y, z方向旋转角度 对应于RotateBy
@param duration 时长
@param dstAngleX x旋转角度
@param dstAngleY y旋转角度
*/
auto *rotateTo = RotateTo::create(3.0, , );
sprite->runAction(rotateTo); /**
SkewTo 倾斜一定角度 对应于SkewBy
@param t 时长
@param sx x角度
@param sy y角度
*/
auto skewTo = SkewTo::create(3.0, , -);
sprite->runAction(skewTo); /**
* JumpTo创建跳跃动作 对应于JumpBy
* @param duration 时长.
* @param position 目标位置.
* @param height 每次跳跃的高度.
* @param jumps 跳跃次数.
*/
auto jumpTo = JumpTo::create(3.0, Vec2(, ), , );
sprite->runAction(jumpTo); /**
* BezierBy创建贝塞尔曲线动作 对应于BezierTo
* @param t 时长
* @param c 贝塞尔配置.
*/
ccBezierConfig bezier;
bezier.controlPoint_1 = Vec2(-, );
bezier.controlPoint_2 = Vec2(, );
bezier.endPosition = Vec2(, );
auto *bezierBy = BezierBy::create(, bezier);
sprite->runAction(bezierBy); /**
* FadeIn渐渐显示至255, (如果精灵本来就是255透明度, 没有效果) 对应于FadeOut渐渐消失 FadeTo(渐变到..)
* @param duration 时长
*/
auto fadeIn = FadeIn::create(3.0);
sprite->runAction(fadeIn); /**
* TintTo填充颜色渐变 对应于TintBy
* @param duration 时长
* @param red r值 0 to 255.
* @param green g值
* @param blue b值
*/
auto tintTo = TintTo::create(3.0, , , );
sprite->runAction(tintTo); /**
* Blink闪烁
* @param duration 时长
* @param blinks 闪烁次数.
*/
auto *blink = Blink::create(1.0f, );
sprite->runAction(blink); /**
OrbitCamera创建一个球面坐标轨迹进行旋转的动作
@param t 动画时长
@param radius 起始半径
@param deltaRadius 半径差
@param angleZ 起始Z角度
@param deltaAngleZ 旋转Z角度
@param angleX 起始X角度
@param deltaAngleX 旋转X角度
*/
auto orbit = OrbitCamera::create(, , , , , , );
auto reverse = orbit->reverse();
sprite->runAction(reverse); /**CardinalSplineTo创建一个样条曲线轨迹的动作 对应于CardinalSplineBy
* @param duration 时长
* @param points 控制点的坐标数组
* @param tension 拟合度 其值= 0 路径最柔和
*/
PointArray *array = PointArray::create();
array->addControlPoint(Vec2(, ));
array->addControlPoint(Vec2(, ));
array->addControlPoint(Vec2(, ));
array->addControlPoint(Vec2(, ));
array->addControlPoint(Vec2(, )); auto cardinalSplineTo = CardinalSplineTo::create(5.0, array, );
sprite->runAction(cardinalSplineTo); /** CatmullRomTo创建一个样条插值轨迹 对应于CatmullRomBy
* @param 时长
* @param points 控制点的坐标数组
* @code
*/
auto catmullRomTo = CatmullRomTo::create(3.0, array);
sprite->runAction(catmullRomTo); /**
EaseBounceIn 创建有反弹效果的动作(开始时反弹) 对应于EaseBounceOut结束位置反弹, EaseBounceInOut
@param action 目标动作
*/
auto moveTo = MoveTo::create(4.0, Vec2(, ));
auto easeBoundIn = EaseBounceIn::create(moveTo);
sprite->runAction(easeBoundIn); /**
EaseBackOut 让目标动作赋予回力, 且以目标动作终点位置作为回力点 对应于EaseBackIn, EaseBackInOut
@param action 目标动作
*/
auto moveTo = MoveTo::create(4.0, Vec2(, ));
auto easeBackOut = EaseBackOut::create(moveTo);
sprite->runAction(easeBackOut); /**
EaseElasticIn 让目标动作赋予弹性, 且以目标动作起点位子赋予弹性 对应于EaseElasticOut, EaseElasticInOut
@param action 目标动作
@param period
*/
auto moveTo = MoveTo::create(4.0, Vec2(, ));
auto easeElasticIn = EaseElasticIn::create(moveTo, 0.5);
sprite->runAction(easeElasticIn); /**
EaseExponentialIn 让目标动作缓慢开始 对应于EaseExponentialOut, EaseExponentialInOut
@param action 目标动作
*/
auto moveTo = MoveTo::create(4.0, Vec2(, ));
auto easeExponentialIn = EaseExponentialIn::create(moveTo);
sprite->runAction(easeExponentialIn); /**
EaseRateAction 给目标动作设置速率
@param action 目标动作
@param rate 速率
**/
auto moveTo = MoveTo::create(4.0, Vec2(, ));
auto easeRateAction = EaseRateAction::create(moveTo, );
sprite->runAction(easeRateAction); /**
EaseSineIn 动作由慢到快 对应于EaseSineOut, EaseSineInOut(动作由慢到快再快到慢)
@param action
*/
auto moveTo = MoveTo::create(4.0, Vec2(, ));
auto easeSineIn = EaseSineIn::create(moveTo);
sprite->runAction(easeSineIn); /** Speed 倍速
* @param action 目标动作
* @param speed 几倍速
*/
auto moveTo = MoveTo::create(4.0, Vec2(, ));
auto speed = Speed::create(moveTo, );
sprite->runAction(speed); /* Spawn 组合多个动作
* 参数:多个目标动作
*/
auto spawn = Spawn::create(action1, action2, NULL);
sprite->runAction(spawn); /** Sequence 多个动作顺序执行
* 参数:多个动作 如果要执行反方向动作, 所有动作都得支持反方向动作
*/
auto moveBy = MoveBy::create(4.0, Vec2(, ));
auto scale = ScaleBy::create(2.0, 0.7);
auto sequence = Sequence::create(moveBy, scale, NULL);
auto sequenceRever = Sequence::create(sequence, sequence->reverse(), NULL);
sprite->runAction(sequence);
sprite->runAction(sequenceRever); /* Repeat 重复动作
* @param action 要重复的动作, 可以是Sequence, Spawn类型的
* @param times 重复次数
*/
auto repeat = Repeat::create(sequence, );
sprite->runAction(repeat); /* RepeatForever 永久性重复动作
* @param action 要重复的动作, 可以是Sequence, Spawn类型的
*/
auto repeatForever = RepeatForever::create(sequence, );
sprite->runAction(repeatForever);

//Follow 创建的时候需要设置要追随的精灵,然后让背景来执行follow  (有待继续研究)

/**

* 创建动作可以设置范围, 也可以不设置

* @param followedNode  追随的精灵

* @param rect  如果没有设置, 表示RECT::ZERO, 表示没有范围

*/

Size s = Director::getInstance()->getWinSize();

log("+++++++++s.width:%f, s.height:%f", s.width, s.height);

sprite->setPosition(Vec2(-200, s.height / 2));

auto move      = MoveBy::create(2, Vec2(s.width * 3, 0));

auto move_back = move->reverse();

auto seq       = Sequence::create(move, move_back, NULL);

auto rep       = RepeatForever::create(seq);

sprite->runAction(rep);

this->runAction(Follow::create(sprite, Rect(0, 0, s.width * 2 - 100, s.height)));

顺序执行

Action * action = Sequence::create(moveby, jumpby, rotateby, NULL);

同时执行

Action * action = Spawn::create(moveby, jumpby, rotateby, NULL);