• cocos2d-x游戏开发(十五)游戏载入动画loading界面


    这个资源载入的loading界面demo是在玩客网做逆转三国的时候随手写的,尽管我在那仅仅待了2个礼拜。可是也算參与了一个商业游戏项目了,学到不少东西。当时使用的cocos2d-x还是1.0版的,我用2.1.2的调试过了。

    上图:


    好了,非常easy,代码有凝视

    上代码:

    1. #include "HelloWorldScene.h"  
    2. #include "SimpleAudioEngine.h"  
    3.   
    4. using namespace cocos2d;  
    5. using namespace CocosDenshion;  
    6.   
    7. CCScene* HelloWorld::scene()  
    8. {  
    9.     // 'scene' is an autorelease object  
    10.     CCScene *scene = CCScene::create();  
    11.       
    12.     // 'layer' is an autorelease object  
    13.     HelloWorld *layer = HelloWorld::create();  
    14.   
    15.     // add layer as a child to scene  
    16.     scene->addChild(layer);  
    17.   
    18.     // return the scene  
    19.     return scene;  
    20. }  
    21.   
    22. // on "init" you need to initialize your instance  
    23. bool HelloWorld::init()  
    24. {  
    25.     //////////////////////////////  
    26.     // 1. super init first  
    27.     if ( !CCLayer::init() )  
    28.     {  
    29.         return false;  
    30.     }  
    31.       
    32.     m_iLoadIdex = 0;  
    33.   
    34.     /////////////////////////////  
    35.     // 2. add a menu item with "X" image, which is clicked to quit the program  
    36.     //    you may modify it.  
    37.   
    38.     // add a "close" icon to exit the progress. it's an autorelease object  
    39.     CCMenuItemImage *pCloseItem = CCMenuItemImage::create(  
    40.                                         "CloseNormal.png",  
    41.                                         "CloseSelected.png",  
    42.                                         this,  
    43.                                         menu_selector(HelloWorld::menuCloseCallback) );  
    44.     pCloseItem->setPosition( ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20) );  
    45.   
    46.     // create menu, it's an autorelease object  
    47.     CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);  
    48.     pMenu->setPosition( CCPointZero );  
    49.     this->addChild(pMenu, 1);  
    50.   
    51.     /////////////////////////////  
    52.     // 3. add your codes below...  
    53.   
    54.     // add a label shows "Hello World"  
    55.     // create and initialize a label  
    56.     CCLabelTTF* pLabel = CCLabelTTF::create("Hello World""Thonburi", 34);  
    57.   
    58.     // ask director the window size  
    59.     CCSize size = CCDirector::sharedDirector()->getWinSize();  
    60.   
    61.     // position the label on the center of the screen  
    62.     pLabel->setPosition( ccp(size.width / 2, size.height - 20) );  
    63.   
    64.     // add the label as a child to this layer  
    65.     this->addChild(pLabel, 1);  
    66.   
    67.     // add "HelloWorld" splash screen"  
    68.     CCSprite* pSprite = CCSprite::create("HelloWorld.png");  
    69.   
    70.     // position the sprite on the center of the screen  
    71.     pSprite->setPosition( ccp(size.width/2, size.height/2) );  
    72.   
    73.     // add the sprite as a child to this layer  
    74.     this->addChild(pSprite, 0);  
    75.       
    76.     // loading边框  
    77.     m_progressFrame = CCSprite::create("loading_fr.png");  
    78.     addChild(m_progressFrame,1);  
    79.     m_progressFrame->setPosition(ccp(240, 50));  
    80.       
    81.     // loading的动作条  
    82.     m_progressBar = CCProgressTimer::create(CCSprite::create("loading_bar.png"));  
    83.     m_progressBar->setType(kCCProgressTimerTypeBar);  
    84.     addChild(m_progressBar);  
    85.     m_progressBar->setVisible(true);  
    86.     m_progressBar->setPosition(ccp(241, 51));  
    87.     // 进度动画运动方向,从左到右  
    88.     m_progressBar->setMidpoint(ccp(0, 0));  
    89.     // 宽高变化,这里是宽度变化  
    90.     m_progressBar->setBarChangeRate(ccp(1, 0));  
    91.     m_progressBar->setPercentage(0);  
    92.       
    93.     // loading动画,没有逻辑处理,实际情况则凝视掉  
    94.     CCProgressTo *to = CCProgressTo::create(10, 100);  
    95.     m_progressBar->runAction(to);  
    96.       
    97.     // 实际的loading逻辑,能够在这里加入  
    98. //    scheduleUpdate();  
    99.     return true;  
    100. }  
    101.   
    102. void HelloWorld::update(float dt)  
    103. {  
    104.       
    105.     m_iLoadIdex++;  
    106.       
    107.     if (m_iLoadIdex <= 50) {  
    108.         loadResource(m_iLoadIdex);  
    109.         m_progressBar->setPercentage(m_iLoadIdex * 100.0 / 50);  
    110.     }  
    111.       
    112.     if (m_iLoadIdex >=50) {  
    113.         unscheduleUpdate();  
    114.     }  
    115. }  
    116.   
    117. // 实际的loading逻辑。载入资源能够在这里加入。

        

    118. // 这里仅仅用了sleep来模拟  
    119. void HelloWorld::loadResource(int index)  
    120. {  
    121.     CCLog("loading ....");  
    122.     switch (index) {  
    123.         case 0:  
    124.             break;  
    125.         default:  
    126.             sleep(1.0);  
    127.             break;  
    128.     }  
    129. }  
    130.   
    131.   
    132. void HelloWorld::menuCloseCallback(CCObject* pSender)  
    133. {  
    134.     CCDirector::sharedDirector()->end();  
    135.   
    136. #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)  
    137.     exit(0);  
    138. #endif  
    139. }  


    东西太简单,还须要上传demo源代码么。要的留言大笑
  • 相关阅读:
    vue和animate动画库实现选项卡
    vue-实现购物车(vue指令、filter过滤器、computed计算属性、Vue.set)
    vue-组件通讯传值(子传父、父传子、兄弟组件)
    vue-双向数据绑定获取表单form所有值
    selenium之处理alert弹出对话框
    selenium之frame操作
    关于selenium中页面元素(Elements)定位思路整理
    Selenium---元素定位之CSS定位
    selenium select下拉选择框定位处理的两种方式
    selenium 通过xpath进行元素定位--By.xpath()
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10522635.html
  • Copyright © 2020-2023  润新知