• cocos2d-x


    相信大家在玩游戏的过程中都会遇到一个loading的界面,loading界面的作用主要是为了加载游戏中需要用到的资源。在比较大型的游戏中,资源通常会占用很大的空间,如果不做一个预加载,在切换界面的过程中很容易造成卡屏的现象。

    下面先给出运行效果。

    今天要讲解的内容便是加载界面中的进度条控件的使用方法,在这里我们只学习控件的使用,不讲解加载过程的逻辑处理。

         所谓的进度条,其实不过是两张纹理的组合,其中一个纹理全部显示出来,而另一个纹理会随着加载的过程有一定的变化,我们可以为它设置一个动作,也可以直接设置它显示的百分比,首先我们来看一下两张图片 :

     这就是未加载时和加载完成后的进度条显示,加载完成后,第二个纹理完全遮住了第一个纹理,但事实上他们是两个纹理。

    先给出实现代码。

    1.   .h文件中声明全局变量。

    1     CCSprite * loadBkSpr;
    2     CCProgressTimer * loadBar;//进度条
    3     CCSprite *loadSprite;     //加载奔跑萝莉

    2. .cpp文件中实现loading效果。

     1 bool GameMain::init()
     2 {
     3     if ( !CCLayer::init() ) {
     4         
     5         return false;
     6     }
     7     
     8     CCSize size = CCDirector::sharedDirector()->getWinSize();
     9     //返回
    10     CCMenuItemImage *back = CCMenuItemImage::create("backA.png", "backB.png",this,menu_selector(GameMain::menuBackCallback));
    11     if (size.height > 500)
    12     {
    13         back->setScale(2.0f);
    14     }
    15     back->setPosition(ccp(size.width - 60,size.height - 60));
    16     back->setEnabled(false);
    17     CCMenu* mainmenu = CCMenu::create(back,NULL);
    18     mainmenu->setPosition(ccp(0,0));
    19     this->addChild(mainmenu,3,4);
    20     
    21     
    22     //加载效果  1.进度条   2.奔跑小人
    23     //1.进度条
    24     loadBkSpr=CCSprite::create("loading_1_1.png");//加载进度条的边框精灵
    25     loadBkSpr->setPosition(ccp(size.width/2,size.height/2+size.height/4));
    26     loadBkSpr->setScale(3.0f);
    27     this->addChild(loadBkSpr);
    28     loadBar=CCProgressTimer::create(CCSprite::create("loading_1_2.png"));
    29     loadBar->setPercentage(1.0f); //设置百分比,初始为0
    30     loadBar->setPosition(ccp(size.width/2,size.height/2+size.height/4));
    31     loadBar->setType(kCCProgressTimerTypeBar);//设置进度条为水平类型
    32     loadBar->setBarChangeRate(ccp(1,0));//设置进度条的宽高变化,此处为宽度变化
    33     loadBar->setMidpoint(ccp(0, 0));//设置动画运动方向从左至右
    34     loadBar->setScale(3.0f);
    35     this->addChild(loadBar);
    36     //设置一个动作,令进度条10秒内读取到百分之100
    37     CCProgressTo * action= CCProgressTo::create(4, 100);
    38     //加载完毕.移除加载动画,进入游戏场景
    39     loadBar->runAction(CCSequence::create(action,CCCallFunc::create(this, callfunc_selector(GameMain::loadSuccess)),NULL));
    40     //2.奔跑小人
    41     loadSprite = CCSprite::create("s_1.png");
    42     CCAnimation * animation = CCAnimation::create();
    43     animation->addSpriteFrameWithFileName("s_1.png");
    44     animation->addSpriteFrameWithFileName("s_2.png");
    45     animation->addSpriteFrameWithFileName("s_3.png");
    46     animation->addSpriteFrameWithFileName("s_4.png");
    47     animation->addSpriteFrameWithFileName("s_5.png");
    48     animation->addSpriteFrameWithFileName("s_6.png");
    49     animation->setDelayPerUnit(0.1f);
    50     animation->setRestoreOriginalFrame(true);
    51     loadSprite->setPosition(ccp(100, size.height/4));
    52     //运行奔跑动画
    53     loadSprite->runAction(CCRepeatForever::create(CCAnimate::create(animation)));
    54     CCMoveTo *moveTo = CCMoveTo::create(4, ccp(1000, size.height/4));
    55     loadSprite->runAction(moveTo);
    56     this->addChild(loadSprite);
    57     
    58     return true;
    59     
    60 }
    61 
    62 
    63 //加载完毕.移除加载动画,进入游戏场景,
    64 void GameMain::loadSuccess()
    65 {
    66     loadBar->removeFromParent();
    67     loadBkSpr->removeFromParent();
    68     loadSprite->removeFromParent();
    69 }

    我们所展示的进度条只不过是一个假的进度条,因为它并不是随着资源加载的百分比而变化的,事实上我们可以设置一个回调函数,在资源加载的过程中调用,并随着加载进度设置进度条的百分比,例如:

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

    此处就不过多讲解了。

    原文链接:http://blog.csdn.net/hitwhylz/article/details/19018613

  • 相关阅读:
    018_STM32程序移植之_串口接收中文
    003_软件安装之_Visual Studio 2012
    001_C#我的第一个串口上位机软件
    017_STM32程序移植之_AS608指纹模块
    016_STM32程序移植之_舵机
    015_STM32程序移植之_NRF24L01模块
    014_STM32程序移植之_L298N电机驱动模块
    002_89C52_Proteus_DAC0832_输出50HZ,正弦波,三角波,矩形波,锯齿波
    001_89C52之_Proteus_ADC0809采集电压
    001_电子工程师招聘笔试题及详细解析
  • 原文地址:https://www.cnblogs.com/atong/p/3542437.html
Copyright © 2020-2023  润新知