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源代码么。要的留言大笑
posted @ 2019-03-13 13:53  ldxsuanfa  阅读(362)  评论(0编辑  收藏  举报