1、场景切换及效果
![](https://img-blog.csdn.net/20150403203222140?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTgxOTgwNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
场景切换用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));