cocos2dx實現載入頁loading頁,載入進度條和載入字樣(附代碼)
使用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());
}
TAG:程序員小新人學習 |