Cocos2d-x的警告提示框和加载提示框的实现

来源:互联网 发布:mac iphoto可以删除吗 编辑:程序博客网 时间:2024/06/04 18:46

//MessageManager.h

//
//  MessageManager.h
//  MyFighter
//
//  Created by LeoChen on 13-8-27.
//
//

#ifndef __MyFighter__MessageManager__
#define __MyFighter__MessageManager__

#include "cocos2d.h"
USING_NS_CC;
using namespace std;
enum
{
    MESSAGETYPE_LOADING,
    MESSAGETYPE_WARNING,
};
class ShadowLayer:public CCLayer
{
public:
    CREATE_FUNC(ShadowLayer);
    bool init();
    virtual bool ccTouchBegan(CCTouch* touch, CCEvent* event);
    virtual void onEnter();
    virtual void onExit();
};
class MessageManager:public CCObject
{
public:
     CREATE_FUNC(MessageManager);
    bool init();
    void show(CCNode*nodeParent, int type,const char *msg);
    void hidden();
    void onWarningHidden(CCNode *node);
private:
    int         m_iType;
    ShadowLayer *m_pLayer;
};

#endif /* defined(__MyFighter__MessageManager__) */



//  MessageManager.cpp
//  MyFighter
//
//  Created by LeoChen on 13-8-27.
//
//

#include "MessageManager.h"
bool MessageManager::init()
{
    return true;
}
 
void MessageManager::show(CCNode*nodeParent, int type,const char *msg)
{
    m_pLayer =ShadowLayer::create();
    CCSize size = CCDirector::sharedDirector()->getWinSize();
    
    m_pLayer->setContentSize(CCSizeMake(size.width, size.height));
    //CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(m_pLayer, -999, true);
    m_pLayer->setTouchEnabled(true);

    switch (type) {
        case MESSAGETYPE_LOADING:
        {
            CCLayerColor *colorLayer = CCLayerColor::create(ccc4(0, 0, 0, 150));
            m_pLayer->addChild(colorLayer);
            CCSprite *sp = CCSprite::create("0-loading.png");
            sp->setPosition(ccp(size.width/2, size.height/2));
            sp->runAction(CCRepeatForever::create(CCRotateTo::create(0.5, 720)));
            m_pLayer->addChild(sp);
        }
            break;
        case MESSAGETYPE_WARNING:
        {
            CCSprite *sp = CCSprite::create("0-warning.png");
            sp->setPosition(ccp(size.width/2, size.height/2));
            sp->runAction(CCSequence::create(CCDelayTime::create(2),CCCallFuncN::create(this, callfuncN_selector(MessageManager::onWarningHidden)),NULL));
            m_pLayer->addChild(sp);
            CCLabelTTF *tf = CCLabelTTF::create(msg, "Arial", 20);
            tf->setDimensions(CCSizeMake(sp->getContentSize().width-20, sp->getContentSize().height-40));
            tf->setPosition(ccp(size.width/2, size.height/2));
            tf->setVerticalAlignment(kCCVerticalTextAlignmentCenter);
            m_pLayer->addChild(tf);
       
            
        }
            break;
        default:
            break;
    }
    nodeParent->addChild(m_pLayer,999);
}
void MessageManager::onWarningHidden(CCNode *node)
{
    hidden();
}
void MessageManager::hidden()
{
    m_pLayer->removeAllChildren();
    m_pLayer->removeFromParent();
}

bool ShadowLayer::ccTouchBegan(CCTouch* touch, CCEvent* event){
    return true;
}
void ShadowLayer::onEnter(){
    CCLayer::onEnter();
    CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, -999, true);
}
void ShadowLayer::onExit(){
    CCLayer::onExit();
    CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);
}
bool ShadowLayer::init()
{

    return true;
}


使用方法:

附件为两张图片

//警告提示

MessageManager::create()->show(this, MESSAGETYPE_WARNING, "名字不能为空");  //两秒后消失


//加载loading

m_pMessage = MessageManager::create();

m_pMessage->show(this ,MESSAGETYPE_LOADING,NULL);//显示

m_pMessage->hidden();//隐藏

//弹窗图片

//loading图片 注意是白色的,所以发表上来看不见。。。右键下载吧

、、、、、、、、、、