cocos2dx实现加载页loading页,加载进度条和加载字样

来源:互联网 发布:中国经济畸形 知乎 编辑:程序博客网 时间:2024/05/18 01:07

使用VS2013实现加载页,包括加载进度条和加载字样,详细代码如下:


LoadingLayer.h:

#include <stdio.h>
#include "cocos2d.h"
#include "OnlyOneShotUtils.h"
using namespace cocos2d;


class LoadingLayer : public Scene {
public:
    static Scene* createScene();
    
    CREATE_FUNC(LoadingLayer);


void callback();


public:
    virtual bool init();
    
    static Sprite* getSprite(std::string pStr);
};


#endif


LoadingLayer.cpp:

#include "LoadingLayer.h"
#include <MainScene.h>
#include "GameData.h"

Scene* LoadingLayer::createScene(){
    auto scene=Scene::create();
    auto layer=LoadingLayer::create();
    scene->addChild(layer);
    return scene;
}


bool LoadingLayer::init()
{
    if (!Scene::init()) {
        return false;
    }

Size visibleSize = Director::getInstance()->getVisibleSize();

Vec2 origin = Director::getInstance()->getVisibleOrigin();
auto spriteLoading = Sprite::create("loading.png");//创建精灵  加载页


auto sprite_jiazai1 = Layer::create();//创建加载页layer
sprite_jiazai1->addChild(spriteLoading);//把加载页图片放进layer中


// position the sprite on the center of the screen 设置精灵的位置在屏幕的中心
spriteLoading->setPosition(Vec2(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y));
//设置layer位置坐标
sprite_jiazai1->setPosition(Vec2(0, 0));


// add the sprite as a child to this layer 添加一个精灵到layer层
this->addChild(sprite_jiazai1, 0);


//创建一个精灵 加载字样
auto jiazaiA = Sprite::create("1.png");
//设置坐标
jiazaiA->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 5-50));
//添加到当前层
this->addChild(jiazaiA);
//创建序列帧动画
auto animation = Animation::create();
//设置动画名字数组的长度
char nameSize[20] = { 0 };
//动画的循环 2张图片
for (int i = 1; i < 3; i++)
{
//循环遍历
sprintf(nameSize, "%d.png", i);
//添加到序列帧动画
animation->addSpriteFrameWithFile(nameSize);
}
//设置动画帧的时间间隔
animation->setDelayPerUnit(0.30f);
//设置播放循环 一直播放为 -1
animation->setLoops(-1);
//设置动画结束后到第一帧
animation->setRestoreOriginalFrame(true);
//创建动画动作
auto animate = Animate::create(animation);
//播放动画
jiazaiA->runAction(animate);


auto cutAction = CallFunc::create(CC_CALLBACK_0(LoadingLayer::callback, this));//callback  进入下一个scene的方法
CCFiniteTimeAction*  action2 = CCSequence::create(CCDelayTime::create(2), cutAction, NULL);
sprite_jiazai1->runAction(action2);


    
    //-------------------------------------------------------------------------------------
//1.进度条  
auto loadBkSpr = CCSprite::create("1L.png");//加载进度条的边框精灵  
loadBkSpr->setPosition(ccp(visibleSize.width / 2, visibleSize.height / 2 - visibleSize.height / 4-120));
//loadBkSpr->setScale(1.0f);//设置比例
this->addChild(loadBkSpr);
auto loadBar = CCProgressTimer::create(CCSprite::create("2L.png"));
loadBar->setPercentage(1.0f); //设置百分比,初始为0  
loadBar->setPosition(ccp(visibleSize.width / 2, visibleSize.height / 2 - visibleSize.height / 4-120));
loadBar->setType(kCCProgressTimerTypeBar);//设置进度条为水平类型  
loadBar->setBarChangeRate(ccp(1, 0));//设置进度条的宽高变化,此处为宽度变化  
loadBar->setMidpoint(ccp(0, 0));//设置动画运动方向从左至右  
//loadBar->setScale(3.0f);设置比例
this->addChild(loadBar);
//设置一个动作,令进度条2秒内读取到百分之100  
CCProgressTo * action = CCProgressTo::create(2, 100);
//加载完毕.移除加载动画,进入游戏场景  
loadBar->runAction(action);

    return true;
}


void LoadingLayer::callback(){
//Main();
Director::getInstance()->replaceScene(MainScene::createScene());

}






阅读全文
0 0
原创粉丝点击