您的位置:首页 > 移动开发 > Cocos引擎

cocos2dx——实现儿童节贺卡02

2015-06-02 00:38 363 查看
这下来实现幻灯片的播放效果,定义一个精灵数组,依次播放,每张播放完成后回调一个函数即可

名字起反了,先叫ThreeScene吧,有点别扭

#ifndef _ThreeScene_H_
#define _ThreeScene_H_
#include "cocos2d.h"
USING_NS_CC;

class ThreeScene :public Layer {
public:
bool init();
static Scene* createScene();
CREATE_FUNC(ThreeScene);
void initVector();
void callback();
public:
static int index; //幻灯片的序号
Vector<Sprite*> sprites;
};

#endif


实现:

#include "ThreeScene.h"
#include "SecondScene.h"

USING_NS_CC;

int ThreeScene::index = 0;

Scene* ThreeScene::createScene()
{
// 'scene' is an autorelease object
auto scene = Scene::create();

// 'layer' is an autorelease object
auto layer = ThreeScene::create();

// add layer as a child to scene
scene->addChild(layer);

// return the scene
return scene;
}

// on "init" you need to initialize your instance
bool ThreeScene::init()
{
//////////////////////////////
// 1. super init first
if (!Layer::init())
{
return false;
}
Size visibleSize = Director::getInstance()->getVisibleSize();
initVector();

//先播放第一张
auto fadein = FadeIn::create(2.0f);
auto fadeout = FadeOut::create(2.0f);
auto callfunc = CallFunc::create(CC_CALLBACK_0(ThreeScene::callback, this));
auto sequence = Sequence::create(fadein, fadeout, callfunc,NULL);
sprites.at(0)->setVisible(true);
sprites.at(0)->runAction(sequence);

//添加粒子效果
ParticleSystem* ps = ParticleSnow::create();
ps->setTexture(Director::getInstance()->getTextureCache()->addImage("heart.png"));
ps->setPosition(Point(visibleSize.width / 2, visibleSize.height));
ps->createWithTotalParticles(1000);
this->addChild(ps);

return true;
}

//初始化数组
void ThreeScene::initVector() {
Size visibleSize = Director::getInstance()->getVisibleSize();
for (int i = 1; i <= 11; i++) {
char buf[20];
sprintf(buf, "%d.jpg",i);
auto sprite = Sprite::create(buf);
sprite->setVisible(false);//设置不可见
sprite->setOpacity(50);//透明度为50
this->addChild(sprite);
sprite->setPosition(visibleSize.width / 2, visibleSize.height / 2);
sprites.pushBack(sprite);
}
}

void ThreeScene::callback() {
index++;
if (index == 11) {
Director::getInstance()->replaceScene(TransitionFade::create(1.2f, SecondScene::createScene()));

}
else {
auto fadein = FadeIn::create(1.0f);
auto fadeout = FadeOut::create(1.0f);
auto callfunc = CallFunc::create(CC_CALLBACK_0(ThreeScene::callback, this));
auto sequence = Sequence::create(fadein, fadeout, callfunc, NULL);
sprites.at(index - 1)->setVisible(false);
sprites.at(index)->setVisible(true);
sprites.at(index)->runAction(sequence);
}

}


效果应该能够想象出来!呵呵,呵呵,幻灯片嘛!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: