Cocos2d-x3.2 Loading 장면의 디자인

3006 단어
//GameScene.h

#include "cocos2d.h"

USING_NS_CC;

class GameScene : public cocos2d::Layer
{
public:
    static Scene* createScene();
    
    virtual bool init();
    
    void menuCallback(Ref* pSender);
    
    void loadingCallBack(Ref* pSender);
    
    void turnToHelloScene();
    
private:
    Size size;
    Label *labelLoading;      //Loading  
    Label *labelPercent;      //     
    
    int numberOfSprites;    //         
    int numberOfLoadSprites;    //          
    
    ProgressTimer *loadProgress;      //   
    
    CREATE_FUNC(GameScene);
};
//GameScene.cpp

#include "GameScene.h"
#include "HelloWorldScene.h"

USING_NS_CC;

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

//        
bool GameScene::init()
{
    if(!Layer::init())      //     
        return false;
    
    //      
    size = Director::getInstance()->getVisibleSize();
    //size = Director::getInstance()->getWinSize();
    
    labelLoading = Label::createWithSystemFont("Loading...", "Marker Felt", 50);
    labelLoading->setPosition(Vec2(size.width/2, size.height/2));
    this->addChild(labelLoading);
    
    labelPercent = Label::createWithSystemFont("%0", "Marker Felt", 50);
    labelPercent->setPosition(Vec2(size.width/2, size.height*0.3));
    this->addChild(labelPercent);
    
    numberOfSprites = 200;
    numberOfLoadSprites = 0;
    
    //       
    loadProgress = ProgressTimer::create(Sprite::create("sliderProgress.png"));
    loadProgress->setBarChangeRate(Vec2(1, 0));     //    
    loadProgress->setType(ProgressTimer::Type::BAR);
    loadProgress->setMidpoint(Vec2(0, 0));
    loadProgress->setPosition(Vec2(size.width/2, size.height*0.2));
    loadProgress->setPercentage(0.0f);
    this->addChild(loadProgress, 1);
    
    //    ,      ,       ,           ,  200 
    for (int i=0; i<100; i++)
    {
        Director::getInstance()->getTextureCache()->addImageAsync("OnePiece_1.png", CC_CALLBACK_1(GameScene::loadingCallBack, this));
        Director::getInstance()->getTextureCache()->addImageAsync("Flag_1.png", CC_CALLBACK_1(GameScene::loadingCallBack, this));
    }
    
    return true;
}

void GameScene::loadingCallBack(Ref* pSender)
{
    numberOfLoadSprites++;
    
    char tmp[10];
    float value = ((float)numberOfLoadSprites / numberOfSprites)*100;   //       
    sprintf(tmp, "%d%%", (int)(value));
    labelPercent->setString(tmp);
    
    loadProgress->setPercentage(value);
    
    //    ,    
    if (numberOfLoadSprites == numberOfSprites) {
        turnToHelloScene();
    }
}

void GameScene::turnToHelloScene()
{
    //         HelloWorld  
    Director::getInstance()->replaceScene(HelloWorld::createScene());
}

좋은 웹페이지 즐겨찾기