动作Action

    /**
     * DelayTime延迟
     * @param d Duration 延迟时间
     */
    auto delayTime = DelayTime::create(3);
    sprite->runAction(delayTime);

    /**
     MoveTo 移动
     @param duration 时长
     @param position 移动到的位置
     */
    auto *moveto = MoveTo::create(1.2f, Vec2(200, 300));
    sprite->runAction(moveto);
    /**
     MoveBy 移动的距离
     @param duration 时长
     @param position 移动的距离, 从起始位置移动(100, 200)的位移
     */
    auto *moveBy = MoveBy::create(1.2f, Vec2(100, 200));
    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, 90, 0);
    sprite->runAction(rotateTo);
    
    /**
     SkewTo 倾斜一定角度 对应于SkewBy
     @param t 时长
     @param sx x角度
     @param sy y角度
     */
    auto skewTo = SkewTo::create(3.0, 0, -30);
    sprite->runAction(skewTo);
    
    /**
     * JumpTo创建跳跃动作   对应于JumpBy
     * @param duration 时长.
     * @param position 目标位置.
     * @param height 每次跳跃的高度.
     * @param jumps 跳跃次数.
     */
    auto jumpTo = JumpTo::create(3.0, Vec2(300, 100), 100, 3);
    sprite->runAction(jumpTo);
    
    /**
     * BezierBy创建贝塞尔曲线动作  对应于BezierTo
     * @param t 时长
     * @param c 贝塞尔配置.
     */
    ccBezierConfig bezier;
    bezier.controlPoint_1 = Vec2(-100, 0);
    bezier.controlPoint_2 = Vec2(100, 80);
    bezier.endPosition = Vec2(0, 160);
    auto *bezierBy = BezierBy::create(2, 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, 120, 120, 140);
    sprite->runAction(tintTo);
    
    /**
     * Blink闪烁
     * @param duration 时长
     * @param blinks 闪烁次数.
     */
    auto *blink = Blink::create(1.0f, 4);
    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(3, 10, 0, 0, 180, 0, 180);
    auto reverse = orbit->reverse();
    sprite->runAction(reverse);

    /**CardinalSplineTo创建一个样条曲线轨迹的动作  对应于CardinalSplineBy
     * @param duration 时长
     * @param points 控制点的坐标数组
     * @param tension 拟合度  其值= 0 路径最柔和
     */
    PointArray *array = PointArray::create(20);
    array->addControlPoint(Vec2(0, 0));
    array->addControlPoint(Vec2(210, 0));
    array->addControlPoint(Vec2(210, 240));
    array->addControlPoint(Vec2(0, 160));
    array->addControlPoint(Vec2(0, 0));

    auto cardinalSplineTo = CardinalSplineTo::create(5.0, array, 0);
    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(300, 300));
    auto easeBoundIn = EaseBounceIn::create(moveTo);
    sprite->runAction(easeBoundIn);
    
    /**
     EaseBackOut 让目标动作赋予回力, 且以目标动作终点位置作为回力点  对应于EaseBackIn, EaseBackInOut
     @param action 目标动作
     */
    auto moveTo = MoveTo::create(4.0, Vec2(300, 300));
    auto easeBackOut = EaseBackOut::create(moveTo);
    sprite->runAction(easeBackOut);
    
    /**
     EaseElasticIn 让目标动作赋予弹性, 且以目标动作起点位子赋予弹性  对应于EaseElasticOut, EaseElasticInOut
     @param action 目标动作
     @param period
     */
    auto moveTo = MoveTo::create(4.0, Vec2(300, 300));
    auto easeElasticIn = EaseElasticIn::create(moveTo, 0.5);
    sprite->runAction(easeElasticIn);
    
    /**
     EaseExponentialIn 让目标动作缓慢开始  对应于EaseExponentialOut, EaseExponentialInOut
     @param action 目标动作
     */
    auto moveTo = MoveTo::create(4.0, Vec2(300, 300));
    auto easeExponentialIn = EaseExponentialIn::create(moveTo);
    sprite->runAction(easeExponentialIn);
    
    /**
     EaseRateAction 给目标动作设置速率
     @param action 目标动作
     @param rate 速率
     **/
    auto moveTo = MoveTo::create(4.0, Vec2(300, 300));
    auto easeRateAction = EaseRateAction::create(moveTo, 3);
    sprite->runAction(easeRateAction);
    
    /**
     EaseSineIn 动作由慢到快  对应于EaseSineOut, EaseSineInOut(动作由慢到快再快到慢)
     @param action
     */
    auto moveTo = MoveTo::create(4.0, Vec2(300, 300));
    auto easeSineIn = EaseSineIn::create(moveTo);
    sprite->runAction(easeSineIn);
    
    /** Speed 倍速
     * @param action 目标动作
     * @param speed 几倍速
     */
    auto moveTo = MoveTo::create(4.0, Vec2(300, 300));
    auto speed = Speed::create(moveTo, 4);
    sprite->runAction(speed);

    /* Spawn 组合多个动作
     * 参数:多个目标动作
     */
    auto spawn = Spawn::create(action1, action2, NULL);
    sprite->runAction(spawn);
    
    /** Sequence 多个动作顺序执行
     * 参数:多个动作   如果要执行反方向动作, 所有动作都得支持反方向动作
     */
    auto moveBy = MoveBy::create(4.0, Vec2(300, 300));
    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, 3);
    sprite->runAction(repeat);
    
    /* RepeatForever 永久性重复动作
     * @param action 要重复的动作, 可以是Sequence, Spawn类型的
     */
    auto repeatForever = RepeatForever::create(sequence, 3);
    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);

posted @ 2016-10-27 17:26  侯文超  阅读(226)  评论(0编辑  收藏  举报