zoukankan      html  css  js  c++  java
  • cocos2d-x游戏开发(十五)游戏加载动画loading界面

    个人原创,欢迎转载:http://blog.csdn.net/dawn_moon/article/details/11478885


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

    上图:


    好了,很简单,代码有注释

    上代码:

    #include "HelloWorldScene.h"
    #include "SimpleAudioEngine.h"
    
    using namespace cocos2d;
    using namespace CocosDenshion;
    
    CCScene* HelloWorld::scene()
    {
        // 'scene' is an autorelease object
        CCScene *scene = CCScene::create();
        
        // 'layer' is an autorelease object
        HelloWorld *layer = HelloWorld::create();
    
        // add layer as a child to scene
        scene->addChild(layer);
    
        // return the scene
        return scene;
    }
    
    // on "init" you need to initialize your instance
    bool HelloWorld::init()
    {
        //////////////////////////////
        // 1. super init first
        if ( !CCLayer::init() )
        {
            return false;
        }
        
        m_iLoadIdex = 0;
    
        /////////////////////////////
        // 2. add a menu item with "X" image, which is clicked to quit the program
        //    you may modify it.
    
        // add a "close" icon to exit the progress. it's an autorelease object
        CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
                                            "CloseNormal.png",
                                            "CloseSelected.png",
                                            this,
                                            menu_selector(HelloWorld::menuCloseCallback) );
        pCloseItem->setPosition( ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20) );
    
        // create menu, it's an autorelease object
        CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
        pMenu->setPosition( CCPointZero );
        this->addChild(pMenu, 1);
    
        /////////////////////////////
        // 3. add your codes below...
    
        // add a label shows "Hello World"
        // create and initialize a label
        CCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "Thonburi", 34);
    
        // ask director the window size
        CCSize size = CCDirector::sharedDirector()->getWinSize();
    
        // position the label on the center of the screen
        pLabel->setPosition( ccp(size.width / 2, size.height - 20) );
    
        // add the label as a child to this layer
        this->addChild(pLabel, 1);
    
        // add "HelloWorld" splash screen"
        CCSprite* pSprite = CCSprite::create("HelloWorld.png");
    
        // position the sprite on the center of the screen
        pSprite->setPosition( ccp(size.width/2, size.height/2) );
    
        // add the sprite as a child to this layer
        this->addChild(pSprite, 0);
        
        // loading边框
        m_progressFrame = CCSprite::create("loading_fr.png");
        addChild(m_progressFrame,1);
        m_progressFrame->setPosition(ccp(240, 50));
        
        // loading的动作条
        m_progressBar = CCProgressTimer::create(CCSprite::create("loading_bar.png"));
        m_progressBar->setType(kCCProgressTimerTypeBar);
        addChild(m_progressBar);
        m_progressBar->setVisible(true);
        m_progressBar->setPosition(ccp(241, 51));
        // 进度动画运动方向,从左到右
        m_progressBar->setMidpoint(ccp(0, 0));
        // 宽高变化,这里是宽度变化
        m_progressBar->setBarChangeRate(ccp(1, 0));
        m_progressBar->setPercentage(0);
        
        // loading动画,没有逻辑处理,实际情况则注释掉
        CCProgressTo *to = CCProgressTo::create(10, 100);
        m_progressBar->runAction(to);
        
        // 实际的loading逻辑,可以在这里加入
    //    scheduleUpdate();
        return true;
    }
    
    void HelloWorld::update(float dt)
    {
        
        m_iLoadIdex++;
        
        if (m_iLoadIdex <= 50) {
            loadResource(m_iLoadIdex);
            m_progressBar->setPercentage(m_iLoadIdex * 100.0 / 50);
        }
        
        if (m_iLoadIdex >=50) {
            unscheduleUpdate();
        }
    }
    
    // 实际的loading逻辑,加载资源可以在这里添加。
    // 这里只用了sleep来模拟
    void HelloWorld::loadResource(int index)
    {
        CCLog("loading ....");
        switch (index) {
            case 0:
                break;
            default:
                sleep(1.0);
                break;
        }
    }
    
    
    void HelloWorld::menuCloseCallback(CCObject* pSender)
    {
        CCDirector::sharedDirector()->end();
    
    #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
        exit(0);
    #endif
    }
    


    东西太简单,还需要上传demo源码么。要的留言 大笑

  • 相关阅读:
    8.10
    今日头条笔试题 1~n的每个数,按字典序排完序后,第m个数是什么?
    Gym 100500B Conference Room(最小表示法,哈希)
    CodeForces 438D The Child and Sequence(线段树)
    UVALIVE 6905 Two Yachts(最小费用最大流)
    Gym Conference Room (最小表示法,哈希)
    hdu 2389 Rain on your Parade(二分图HK算法)
    Codeforces Fox And Dinner(最大流)
    zoj 3367 Counterfeit Money(dp)
    ZOJ3370. Radio Waves(2-sat)
  • 原文地址:https://www.cnblogs.com/james1207/p/3310692.html
Copyright © 2011-2022 走看看