cocos2d-x 动作

XXXBy: 支持反向reverse
XXXTo: 不支持
/*
MoveTo/MoveBy  创建一个移动的动作   
参数1:移动到目标坐标所需的时间 参数2:目标坐标    MoveBy支持reverse 可以获取其反向动作
*/
 ActionInterval * moveBy = MoveBy::create(5,Vec2(300, 100));
 ActionInterval * actionmoveback= moveBy->reverse();
 sp->runAction(actionmoveback);
   
 /*    
ScaleTo/ScaleBy   作用:创建一个缩放的动作
参数1:达到缩放大小所需的时间 参数2 :缩放的比例
*/
ActionInterval * scaleto = ScaleTo ::create(2, 2);
sp->runAction(scaleto);
   
/*     
RotateTo/RotateBy   作用创建一个旋转的动作
参数1:旋转的时间   参数2:旋转角度,正为顺时针,负为逆时针
*/
ActionInterval * rotateto = RotateTo::create(2, 90);
sp->runAction(rotateto);
   
/*   
SkewTo/SkewBy    作用创建一个倾斜的动作
参数1:倾斜到特定角度所需的时间 参数2:x轴的倾斜角度 参数3:y轴的倾斜角度
*/
ActionInterval * skewto = SkewTo::create(2, 10, 10);
sp->runAction(skewto);
   
/*     
JumpTo/JumpBy    作用:创建一个跳的动作
参数1:跳到目标动作位子的所需时间 参数2:目标位置
参数3:跳的高度 参数4: 跳到目标位置的次数
*/
ActionInterval* jumpto = JumpTo ::create(2, Vec2(300, 200), 50, 4 );
sp->runAction(jumpto);
/*         
BezierTo/BezierBy   创建一个贝塞尔曲线运动的动作
参数1:贝塞尔曲线运动的时间 参数2 : BezierConfig结构体
*/
// BezierConfig结构体
BezierConfig bezierCon;
bezierCon.controlPoint_1=Vec2(200, 150);//控制点1
bezierCon.controlPoint_2=Vec2(200, 160);//控制点2
bezierCon.endPosition =Vec2(340, 100);  //结束位置
       
ActionInterval * action = BezierTo::create(2, bezierCon);
sp->runAction(action);
      
/*
FadeIn   创建一个渐变出现的动作 参数是时间
FadeOut  创建一个渐变消失的动作 参数是时间
FadeTo 不透明度的变换,参数1:持续时间 参数2:设置透明度SetOpacity(0~100)
*/
ActionInterval * fadein = FadeIn::create(2);
ActionInterval * fadeout = FadeOut::create(2);
/*
TintTo/TintBy 染色
参数1: 持续的时间. 参数234: RGB颜色值,范围为0255
*/
auto tintAct = TintBy::create(3, 255, 0, 0);
auto tintre = tintAct->reverse();
   
/*
Blink 闪烁
参数1: 持续的时间.  参数2: 闪烁的次数
*/
auto blinkAct = Blink::create(2.0f, 5);
   
/*    
DelayTime    创建一个延迟的动作
参数  延迟的时间
*/
ActionInterval * delaytime = DelayTime::create(3);
sp->runAction(delaytime);
// 让目标动作缓慢开始,参数:目标动作
auto act = EaseBounceIn::create(moveAct); 
// 目标动作赋予反弹力,且以动作结束开始反弹, 参数:目标动作                
auto act = EaseBounceOut::create(moveAct); 
// 目标动作赋予反弹力,且以开始与结束开始反弹,参数:目标动作             
auto act = EaseBounceInOut::create(moveAct);   
// 目标动作起点位置赋予回力 参数:目标动作           
auto act = EaseBackIn::create(moveAct);
// 目标动作重点位置赋予回力 参数:目标动作                  
auto act = EaseBackOut::create(moveAct);   
// 目标动作起点和终点赋予回力,参数:目标动作               
auto act = EaseBackInOut::create(moveAct);  
// 让目标动作起点赋予弹性,参数:目标动作           
auto act = EaseElasticIn::create(moveAct);
// 让目标动作终点赋予弹性,参数:目标动作               
auto act = EaseElasticOut::create(moveAct);
// 让目标动作起点终点赋予弹性,参数:目标动作               
auto act = EaseElasticInOut::create(moveAct);
// 让目标动作缓慢开始           
auto act = EaseExponentialIn::create(moveAct);
// 让目标动作缓慢终止           
auto act = EaseExponentialOut::create(moveAct);
// 让目标动作缓慢开始和终止          
auto act = EaseExponentialInOut::create(moveAct);  
// 让目标动作又慢到快     
auto act = EaseSineIn::create(moveAct); 
// 让目标动作又快到慢                  
auto act = EaseSineOut::create(moveAct);               
// 让目标动作又慢到快再快到慢
auto act = EaseSineInOut::create(moveAct);                 
   
/*     
OrbitCamera    作用:创建一个球面坐标轨迹进行旋转的动作
参数1 : 旋转轨迹的时间
参数2 :起始半径
参数3:半径差
参数4:起始z角
参数5:旋转z角的差
参数6:起始x角
参数7:旋转x角的差
*/
ActionInterval * orbitcameraa = OrbitCamera::create(3, 10, 0, 45, 180, 90, 0);
sp->runAction(orbitcameraa);
// 创建一个点数组
auto array = PointArray::create(20);
// 添加控制点,依次添加即可
array->addControlPoint(Vec2(0, 0));
array->addControlPoint(Vec2(s.width/2-30, 0));
array->addControlPoint(Vec2(s.width/2-30, s.height-80));
array->addControlPoint(Vec2(0, s.height-80));
array->addControlPoint(Vec2(0, 0));
   
/*
CardinalSplineBy 曲线运动
参数一: 持续的时间 参数二: 点数组
参数三: 张力,可理解为惯性,数值越大,惯性越大。可修改其数值,但要与drawCardinalSpline2个参数相对应
*/
auto tension = 0;
auto action = CardinalSplineBy::create(3, array, tension);
// 创建相反动作
auto reverse = action->reverse();
// 创建序列动作
auto seq = Sequence::create(action, reverse, nullptr);
sprite1->runAction(seq);
// 使用DrawNode绘制自定义图形
auto drawNode1 = DrawNode::create();
drawNode1->setPosition(Vec2(50,50));
// 绘制曲线,参数:点数组,张力,精度(指线段的精细精度,越大分段越多,越精细)颜色
drawNode1->drawCardinalSpline(array, tension, 100, Color4F(1.0, 0.0, 1.0, 1.0));
this->addChild(drawNode1,0);
   
/*
Follow 作用:创建一个跟随动作
参数1:跟随的目标对象  参数2: 跟随范围,离开范围就不再跟随
创建一个参照物spT
*/
Sprite * spt = Sprite::create("Icon.png);
spt->setPosition(Vec2(420,40));
addChild(spt);
sp->runAction(MoveTo::create(3, Vec2(940,sp->getPositionY())));
   
Follow * follow = Follow::create(sp,Rect(0, 0, 960, 320));
this-> runAction(follow);
    // 创建一个点数组
    auto array = PointArray::create(20);
    // 添加控制点,依次添加即可
    array->addControlPoint(Vec2(0, 0));
    array->addControlPoint(Vec2(80, 80));
    array->addControlPoint(Vec2(s.width - 180, 80));
    array->addControlPoint(Vec2(s.width - 80, s.height - 80));
    array->addControlPoint(Vec2(80, s.height - 80));
    array->addControlPoint(Vec2(80, 80));
    array->addControlPoint(Vec2(s.width / 2, s.height / 2));
   
    auto action = CatmullRomBy::create(3, array);
    auto reverse = action->reverse();
    auto seq = Sequence::create(action, reverse, nullptr);
    personSpr->runAction(seq);
   
    auto drawNode1 = DrawNode::create();
    drawNode1->setPosition(Vec2(50,50));
    drawNode1->drawCatmullRom(array, 50, Color4F(1.0, 0.0, 1.0, 1.0));
    this->addChild(drawNode1);
   
/*
Speed    作用:让目标动作运行速度加倍
参数1:目标动作 参数2: 倍速
*/ 
ActionInterval * move =  MoveTo::create(10,  p(300,sp->getPositionY()));
Speed * speed = Speed::create(move, 100);
sp->runAction(speed);
   
 //  Spawn 让多个动作同时执行,参数:目标动作的可变参数
 ActionInterval * move1 =  MoveTo::create(10,  p(300,sp->getPositionY()));
 ActionInterval * scale =  ScaleTo::create(2, 3);
 ActionInterval * rotate =  RotateTo::create(4, 190);
 FiniteTimeAction * spawn = Spawn::create(move1,scale,rotate,NULL);
 sp->runAction(spawn);
   
 // Sequence 作用:让多个动作按照前后顺序逐一执行 参数:目标动作的可变参数 
 ActionInterval * move2 =  MoveTo::create(2,  p(300, sp->getPositionY()));
 ActionInterval * scalet =  ScaleTo::create(2, 3);
 FiniteTimeAction * seq=  Sequence::create(move2,scalet,NULL);
 sp->runAction(seq);
   
//    Repeat 对目标动作进行重复运动(目标动作可以是 Sequence , Spawn)
//    参数1:目标动作
//    参数2:重复次数
//    RepeatForever 对目标动作进行永久性的重复运动(目标动作可以是 Sequence , Spawn)
//    参数:目标动作
ActionInterval * move =  MoveTo::create(1,  p(300, sp->getPositionY()));
ActionInterval * move1 =  MoveTo::create(1,  p(100,100));
FiniteTimeAction* seq =  Sequence::create(move,move1,NULL);
ActionInterval * repeatForever = RepeatForever::create(( ActionInterval* )seq);
sp->runAction(repeatForever);
   
//CallFunc 创建一个回调动作(调用不带参数的回调方法);
//CallFuncN 创建一个回调动作(调用 带一个参数的回调方法);
//CallFuncND 创建一个回调动作(调用 带两个参数的回调方法);
//参数1:目标动作
//参数2:目标回调函数
CallFunc * funcall = CallFunc::create(this, callfunc_selector(HelloWorld::callbackC));     
CallFuncN * funcall = CallFuncN::create(this, callfuncN_selector(HelloWorld::callbackN));
CallFuncND * funcall = CallFuncND::create(this, callfuncND_selector(HelloWorld::callbackND)  ,(void*)0xbebabeba);    
 
posted @ 2018-10-22 20:19  Code~  阅读(353)  评论(0)    收藏  举报