.h
//按钮点击的回调类型定义
typedef void (cocos2d::Ref::*BtnClickCallBack)();
class ShowMsgLayer : public Layer
{
public:
static Scene * scene();
virtual bool init();
virtual void onEnter();
virtual void onExit();
CREATE_FUNC(ShowMsgLayer);
~ShowMsgLayer();
/**
*初始化UI资源
*/
void initUI();
/**
*显示提示信息
*/
void showMsg(std::string content, Ref * taget = NULL, BtnClickCallBack callBack = NULL, std::string title = "提示");
private:
Ref * m_Target;
BtnClickCallBack m_CallBack;
};
.cpp
void ShowMsgLayer::initUI()
{
Node * lNode = MainTool::readCsbFile("ErrorLayer");
lNode->setAnchorPoint(Vec2::ANCHOR_MIDDLE);
Size size = Director::getInstance()->getWinSize();
lNode->setPosition(size.width / 2, size.height / 2);
this->addChild(lNode);
Layout * uiLayer = (Layout *)lNode;
titleText = static_cast<Text *>(Helper::seekWidgetByName(uiLayer, "txtErrorTitle"));
conteneText = static_cast<Text *>(Helper::seekWidgetByName(uiLayer, "txtErrorDesc"));
//关闭按钮的回调
Button * closeBtn = static_cast<Button *>(Helper::seekWidgetByName(uiLayer, "btnErrorClose"));
closeBtn->addTouchEventListener([=](Ref * sender, Widget::TouchEventType type)
{
if (type == Widget::TouchEventType::ENDED)
{
if (m_Target && m_CallBack)
{
(m_Target->*m_CallBack)();
}
this->removeFromParent();
}
});
}
void ShowMsgLayer::showMsg(std::string content, Ref * taget, BtnClickCallBack callBack, std::string title)
{
titleText->setString(title.c_str());
conteneText->setString(content.c_str());
m_Target = taget;
m_CallBack = callBack;
}
//调用
ShowMsgLayer * msgLayer = ShowMsgLayer::create();
this->addChild(msgLayer);
msgLayer->showMsg("您的网络出现异常,请检查确认网络是否连接后再开启游戏,谢谢!", this, (BtnClickCallBack)(&GameLayer::onCloseMsgBtnClick));
void GameLayer::onCloseMsgBtnClick()
{
Director::getInstance()->replaceScene(CenterLayer::scene());
}