//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图片 注意是白色的,所以发表上来看不见。。。右键下载吧
、、、、、、、、、、