自定义回调 并将之以参数的形式传入

来源:互联网 发布:webshell查杀工具 编辑:程序博客网 时间:2024/05/21 02:51

.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());}







0 0