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

来源:互联网 发布:淘宝详情页素材图片 编辑:程序博客网 时间:2024/05/08 09:53
1、场景切换及效果
    场景切换用replaceScene
    添加切换动画
    使用格式
    
可以上cocos2d-x的中文API 查看  http://cn.cocos2d-x.org/doc/cocos2d-x-3.0/da/d00/group__transition.html
    如右上角到左下角淡出的切换效果 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
原创粉丝点击