cocos2d-x (三) :场景、动作、动画特效

1、场景切换及效果
    场景切换用replaceScene
    添加切换动画
    使用格式
    
    如 右上角到左下角淡出的切换效果  TransitionFadeBL * create (
float t, Scene *scene)
    t为切换效果的时间
    
    
     
    replaceScene(Scene* scene)
    所以使用格式如下
     Director::getInstance()->replaceScene(TransitionFadeBL::create(1,ImnameSence::createScene()));
     
2、动作
    所有动作都是继承自Action

    动作使用如下
    label->runAction(MoveTo::create(1,Point(100,100)));
    让label1秒内从当前位置移动到坐标(100,100)
    当前物体的所有动作都可以通过 调用runAction(Action *action )实现
反转
    label->runAction(MoveBy::create(1,Point(-10,-10))->reverse());
    反转仅需要调用action->reverse()便可实现
    因为大部分动作都是继承自 CCFiniteTimeAction 
    CCFiniteTimeAction  定义了Reverse 方法 可以获得一个与原动作相反的动作
重复
    有限次数的重复
    label->runAction(Repeat::create(RotateBy::create(1,180),3));
    使用Repeat::create(Action* action,int time)便可让动作重复执行time次
    无线重复 RepeatForever
    label->runAction(RepeatForever::create(RotateBy::create(1,180)));
混合
   动作混合,即让一个物体同时执行n个动作,主要通过Spawn类实现
    label->runAction(Spawn::create(MoveBy::create(1,Point(100,100)),RotateBy::create(1,360),NULL));
    这行代码使label在运动到点(100,100)的过程中边旋转
    Spawn* Spawn::create(FiniteTimeAction *action1, ...) 从Spawn的定义中可以看到Spawn::create是个变长函数,他可以混合无数多个动作,但是在最后一定要加上一个NULL,表示后面已经没有动作了
序列
    动作序列表示指定物体按序列中的顺序,顺序执行一系列动作
    如
    label->runAction(Sequence::create(MoveTo::create(1,Point(100,100)),RotateBy::create(1,360),NULL));
    label先移动到点(100,100),然后再点(100,100)再选择360度
     Sequence::create同Spawn::create,也是个变长函数,最后要加一个NULL
侦听
    动作侦听即指在动作执行完后再执行某一段代码完成指定任务
    动作侦听由动作序列Sequence和CallFunc配合完成
    
    可以看到CallFunc是继承自FiniteTimeAction的,创建的时候是传入一个回调函数
    static CallFunc * create (const std::function< void()> &func)
    所以使用方法如下
    label->runAction(Sequence::create(
    MoveTo::create(1,Point(100,100)),
    RotateBy::create(1,360),
    CallFunc::create([](){
     MessnameBox("action complete","complete");
   }),NULL));
    需要注意:CallFunc需要放到倒数第二个位置,最后一个是NULL
3、动画
    动画我使用了这两个文件,分别是anim.png  anim.plist文件
    这个两个素材是由Adobe Flash Professional CC生成的cocos-2dx动画
    
代码:
 
//动画
 //创建一个缓存
 auto cache = SpriteFrameCache::getInstance();
 //先把图片读入内存
 cache->addSpriteFramesWithFile("anim.plist");
	
 char name[15];
 memset(name,0,15);
 //创建动画需要读入每一帧的资源名字
 Vector<SpriteFrame*> vec;
 for(int i=0;i<40;i++){
  sprintf(name,"anim%04d",i);

  vec.pushBack(cache->getSpriteFrameByName(name));
 }
 //指定动画源和每一帧时间
 Animation *animation = Animation::createWithSpriteFrames(vec,0.1f);
 Animate *animate = Animate::create(animation);

 auto sprite = Sprite::create();
 addChild(sprite);
 sprite->setPosition(200,200);
 sprite->runAction(RepeatForever::create(animate));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值