cocos2d-x带有自定义button响应事件的messagebox

cocos2d-x带有自定义button响应事件的messagebox,第1张

概述官方给的例子里MessageBox居然只有一个确定按钮,没有我想要的确认,取消按钮,没办法就自己写了一个,难点是确认按钮的回调格式怎么写,定义如下: bool initWithNode(cocos2d::Node* node,const std::string& msg,  const float& time, cocos2d::Vec2 point ,const cocos2d::ccMenuC

官方给的例子里MessageBox居然只有一个确定按钮,没有我想要的确认,取消按钮,没办法就自己写了一个,难点是确认按钮的回调格式怎么写,定义如下:

bool initWithNode(cocos2d::Node* node,const std::string& msg,
const float& time,cocos2d::Vec2 point,const cocos2d::ccmenuCallback& callback);

注意这里的ccmenuCallback& callback,这是我从官方menuItemImage源代码里抄来的,ccmenuCallback实际上是:

typedef std::function<voID(Ref*)> ccmenuCallback;

在实现文件中是这么写:

//确认提交按钮
MenuItemImage* btnOK = MenuItemImage::create("Store/okBtn.png","Store/okBtnDown.png","Store/okBtn.png",callback); //注意这个callback,不要在这里加什么CC_CALLBACK_XX什么的了

在调用的时候这么写:

BDMessageBox* msgBox = BDMessageBox::createtoast(this,“对不起金钱不足,是否充值?”,1.f,
pos,CC_CALLBACK_1(UpdataSence::gotoStoreLayer,this));

这里才用到CC_CALLBACK_1


给出完整的MessageBox源码,比较简陋,可以自己修改内容,不过我还加了从小变大的d出效果,


BDMessageBox.h

/*********************************   自定义d出框**********************************/#ifndef _BDMessageBox_#define _BDMessageBox_#include "cocos2d.h"class BDMessageBox : public cocos2d::Layer{public:	BDMessageBox();	~BDMessageBox();	//初始化d出框 node:父结点,msg:显示的消息内容,time:d出框d出需要的时间,暂时未用,point:显示在父结点的位置	//callback: 确认按钮的回调函数	bool initWithNode(cocos2d::Node* node,const float& time,const cocos2d::ccmenuCallback& callback);	//产生一个d出框 node:父结点,msg:显示的消息内容,time:d出框d出需要的时间,暂时未用,point:显示在父结点的位置	//callback: 确认按钮的回调函数	static BDMessageBox* createtoast(cocos2d::Node* node,const cocos2d::ccmenuCallback& callback);  //std::function<voID()> callback	virtual voID onEnter();protected:	voID OkClick();  //点击OK响应,这里已经不用了,已经改成回调用户定义的callback	voID CancelClick();  //点击cancel响应事件protected:	cocos2d::Sprite* _bg; //背影private:};#endif

BDMessageBox.cpp

#include "BDMessageBox.h"#include "LanguageString.h"#define TAG_TOAST_LABEL 1130#define TAG_TOAST_LAYER 1131using namespace std;USING_NS_CC;BDMessageBox::BDMessageBox(){}BDMessageBox::~BDMessageBox(){}bool BDMessageBox::initWithNode(cocos2d::Node* node,const ccmenuCallback& callback ){	if (!Layer::init())	{		return false;	}	//背景	_bg = Sprite::create("store/msgBoxBg.png");	this->addChild(_bg);	Size size = _bg->getContentSize();	this->setContentSize(size);	//显示的信息	//_labelExplain = Label::create(Explain,"Helvetica-Bold",16,Size(200,100),TextHAlignment::left);	Label* label = Label::create(msg.c_str(),15,TextHAlignment::left,TextVAlignment::CENTER);	label->setcolor(color3B::YELLOW);	label->ignoreAnchorPointForposition(false); //开启锚点有效,不设false就是label被addChild后锚点不是原来的锚点而变为(0,0)左下角,设为false还是取原来的锚点	label->setAnchorPoint(Vec2::ANCHOR_MIDDLE); //锚点在中间	label->setTag(TAG_TOAST_LABEL);	label->setposition(Vec2(size.wIDth/2,size.height/2));	_bg->addChild(label);	//CallFunc* call = CallFunc::create(callback);	//确认提交按钮	MenuItemImage* btnOK = MenuItemImage::create("Store/okBtn.png",callback);	btnOK->setScale(0.8f);	Menu* btnOkMenu = Menu::create(btnOK,NulL);	btnOkMenu->setposition(Vec2(size.wIDth*0.3f,size.height*0.25f));	_bg->addChild(btnOkMenu,2);	//取消按钮	MenuItemImage* btnCancel = MenuItemImage::create("Store/cancelBtn.png","Store/cancelBtnDown.png","Store/cancelBtn.png",CC_CALLBACK_0(BDMessageBox::CancelClick,this));	btnCancel->setScale(0.8f);	Menu* btnCancelMenu = Menu::create(btnCancel,NulL);	btnCancelMenu->setposition(Vec2(size.wIDth*0.7f,size.height*0.25f));	_bg->addChild(btnCancelMenu,2);	//初始设置小	_bg->setScale(0.01f);	_bg->setVisible(false);	node->addChild(this,5);	this->setposition(point);	return true;}BDMessageBox* BDMessageBox::createtoast(cocos2d::Node* node,const ccmenuCallback& callback){	BDMessageBox* pRet = new BDMessageBox();	if (pRet && pRet->initWithNode(node,msg,time,point,callback))	{		return pRet;	}	else	{		delete pRet;		pRet = nullptr;		return pRet;	}}voID BDMessageBox::onEnter(){	Layer::onEnter();	_bg->setVisible(true);	//对话框由小到大	Sequence *seq = Sequence::create(EaseElasticIn::create(Scaleto::create(0.5f,1.1f,1.1f)),EaseElasticOut::create(Scaleto::create(0.2f,1.f)),NulL);	_bg->runAction(seq);}voID BDMessageBox::OkClick(){}voID BDMessageBox::CancelClick(){	CallFunc* removeC = CallFunc::create([this]()   //飘出后要删除掉自身	{		_bg->setVisible(false);		this->removeFromParentAndCleanup(true);    //这里CallFunc参数是lambda表达式,捕获参数是类自身	});	Sequence *seq = Sequence::create(EaseElasticOut::create(Scaleto::create(0.5f,0.01f,0.01f)),removeC,nullptr);	_bg->runAction(seq);}
总结

以上是内存溢出为你收集整理的cocos2d-x带有自定义button响应事件的messagebox全部内容,希望文章能够帮你解决cocos2d-x带有自定义button响应事件的messagebox所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1073606.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存