中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

[cocos2dx]自定義loading動畫

發布時間:2020-07-11 21:12:22 來源:網絡 閱讀:581 作者:蓬萊仙羽 欄目:開發技術

相信大家在玩游戲的過程中都會遇到一個loading的界面,loading界面的作用主要是為了加載游戲中需要用到的資源。在比較大型的游戲中,資源通常會占用很大的空間,如果不做一個預加載,在切換界面的過程中很容易造成卡屏的現象。

下面先給出運行效果。

[cocos2dx]自定義loading動畫

今天要講解的內容便是加載界面中的進度條控件的使用方法,在這里我們只學習控件的使用,不講解加載過程的邏輯處理。

所謂的進度條,其實不過是兩張紋理的組合,其中一個紋理全部顯示出來,而另一個紋理會隨著加載的過程有一定的變化,我們可以為它設置一個動作,也可以直接設置它顯示的百分比,首先我們來看一下兩張圖片 :

[cocos2dx]自定義loading動畫 [cocos2dx]自定義loading動畫

這就是未加載時和加載完成后的進度條顯示,加載完成后,第二個紋理完全遮住了第一個紋理,但事實上他們是兩個紋理。

先給出實現代碼。

1. .h文件中聲明全局變量。

1
2
3
CCSprite * loadBkSpr;
CCProgressTimer * loadBar;//進度條
CCSprite *loadSprite;     //加載奔跑蘿莉
2. .cpp文件中實現loading效果。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
bool GameMain::init()
{
    if ( !CCLayer::init() ) {
         
        return false;
    }
     
    CCSize size = CCDirector::sharedDirector()->getWinSize();
    //返回
    CCMenuItemImage *back = CCMenuItemImage::create("backA.png", "backB.png",this,menu_selector(GameMain::menuBackCallback));
    if (size.height > 500)
    {
        back->setScale(2.0f);
    }
    back->setPosition(ccp(size.width - 60,size.height - 60));
    back->setEnabled(false);
    CCMenu* mainmenu = CCMenu::create(back,NULL);
    mainmenu->setPosition(ccp(0,0));
    this->addChild(mainmenu,3,4);
     
     
    //加載效果  1.進度條   2.奔跑小人
    //1.進度條
    loadBkSpr=CCSprite::create("loading_1_1.png");//加載進度條的邊框精靈
    loadBkSpr->setPosition(ccp(size.width/2,size.height/2+size.height/4));
    loadBkSpr->setScale(3.0f);
    this->addChild(loadBkSpr);
    loadBar=CCProgressTimer::create(CCSprite::create("loading_1_2.png"));
    loadBar->setPercentage(1.0f); //設置百分比,初始為0
    loadBar->setPosition(ccp(size.width/2,size.height/2+size.height/4));
    loadBar->setType(kCCProgressTimerTypeBar);//設置進度條為水平類型
    loadBar->setBarChangeRate(ccp(1,0));//設置進度條的寬高變化,此處為寬度變化
    loadBar->setMidpoint(ccp(0, 0));//設置動畫運動方向從左至右
    loadBar->setScale(3.0f);
    this->addChild(loadBar);
    //設置一個動作,令進度條10秒內讀取到百分之100
    CCProgressTo * action= CCProgressTo::create(4, 100);
    //加載完畢.移除加載動畫,進入游戲場景
    loadBar->runAction(CCSequence::create(action,CCCallFunc::create(this, callfunc_selector(GameMain::loadSuccess)),NULL));
    //2.奔跑小人
    loadSprite = CCSprite::create("s_1.png");
    CCAnimation * animation = CCAnimation::create();
    animation->addSpriteFrameWithFileName("s_1.png");
    animation->addSpriteFrameWithFileName("s_2.png");
    animation->addSpriteFrameWithFileName("s_3.png");
    animation->addSpriteFrameWithFileName("s_4.png");
    animation->addSpriteFrameWithFileName("s_5.png");
    animation->addSpriteFrameWithFileName("s_6.png");
    animation->setDelayPerUnit(0.1f);
    animation->setRestoreOriginalFrame(true);
    loadSprite->setPosition(ccp(100, size.height/4));
    //運行奔跑動畫
    loadSprite->runAction(CCRepeatForever::create(CCAnimate::create(animation)));
    CCMoveTo *moveTo = CCMoveTo::create(4, ccp(1000, size.height/4));
    loadSprite->runAction(moveTo);
    this->addChild(loadSprite);
     
    return true;
     
}
 
 
//加載完畢.移除加載動畫,進入游戲場景,
void GameMain::loadSuccess()
{
    loadBar->removeFromParent();
    loadBkSpr->removeFromParent();
    loadSprite->removeFromParent();
}

我們所展示的進度條只不過是一個假的進度條,因為它并不是隨著資源加載的百分比而變化的,事實上我們可以設置一個回調函數,在資源加載的過程中調用,并隨著加載進度設置進度條的百分比,例如:

CCTextureCache::sharedTextureCache()->addImageAsync("HelloWorld.png”,this,callfuncO_selector(newScene::loadCallBack)); 

此處就不過多講解了。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

龙州县| 应用必备| 上高县| 九寨沟县| 巍山| 蓬莱市| 株洲县| 兰西县| 潢川县| 广河县| 石渠县| 文山县| 连南| 玉田县| 泽普县| 富平县| 宜兰市| 西宁市| 嘉峪关市| 织金县| 新田县| 文成县| 河间市| 砚山县| 罗田县| 吉木萨尔县| 汉源县| 汪清县| 花莲县| 洞头县| 田东县| 抚宁县| 太原市| 石柱| 蓬溪县| 晋江市| 竹山县| 朝阳县| 清丰县| 开阳县| 镇安县|