Cocos2d-x 3.2 大富翁游戏项目开发-第四部分 退出对话框

Cocos2d-x 3.2 大富翁游戏项目开发-第四部分 退出对话框,第1张

概述<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">这部分代码从网上查阅了一下,基本都是以前版本编写的,需要稍微改动一下即可,效果如图</span> 首先看看在MenuScene.cpp如是如何调用起对话框的void MenuScene::popupLayer
<span >这部分代码从网上查阅了一下,基本都是以前版本编写的,需要稍微改动一下即可,效果如图</span>

首先看看在MenuScene.cpp如是如何调用起对话框的voID MenuScene::popupLayer(){    // 定义一个d出层,传入一张背景图    PopupLayer* popDialog = PopupLayer::create(DIALOG_BG);    // ContentSize 是可选的设置,可以不设置,如果设置把它当作 9 图缩放    popDialog->setContentSize(CCSizeMake(Quit_Dialog_Size_WIDth,Quit_Dialog_Size_Height));     popDialog->setTitle(DIALOG_Title);    popDialog->setContentText(DIALOG_CONTENT,20,60,250);    // 设置回调函数,回调传回一个 CCNode 以获取 tag 判断点击的按钮    popDialog->setCallbackFunc(this,callfuncN_selector(MenuScene::quitbuttonCallback));    // 添加按钮,设置图片,文字,tag 信息    popDialog->addbutton(button_BG1,button_BG3,OK,Btn_Quit_OK_TAG);    popDialog->addbutton(button_BG2,CANCEL,Btn_Quit_Cancel_TAG);    this->addChild(popDialog);// 添加到当前层}

PopupLayer.h 和PopupLayer.cpp是d出对话框的代码:

首先看PopupLayer.h
const int Pop_FontSize = 20;//定义字体大小class PopupLayer :public Layer{	static PopupLayer * create(const char* backgroundImage);//根据背景图创建对象	voID setTitle(const char* Title,int Fontsize=Pop_FontSize);//设置对话框标题	voID setContentText(const char* text,int Fontsize=Pop_FontSize,int padding=50,int paddinttop=100);//设置对话框文本内容	voID setCallbackFunc(Object* target,SEL_CallFuncN callfun);//设置按键回调方法	bool addbutton(const char* normalimage,const char* selectedImage,const char* Title,int tag=0);//添加对话框按键,如确认取消	virtual voID onEnter();//当进入时调用	virtual voID onExit();//voID buttonCallback(CCObject* pSender);    int m_contentpadding;// 文字内容两边的空白区距离int m_contentpaddingtop;  //文字上边空白区距离 CCObject* m_callbackListener;SEL_CallFuncN m_callback;//定义具有retain属性的变量    CC_SYNTHESIZE_RETAIN(Menu*,m__pMenu,Menubutton);CC_SYNTHESIZE_RETAIN(Sprite*,m__sfBackGround,SpriteBackGround);…………………….};


PopupLayer.cpp部分代码如下:


PopupLayer::PopupLayer():m__pMenu(NulL),m_contentpadding(0),m_contentpaddingtop(0),m_callbackListener(NulL),m_callback(NulL),m__sfBackGround(NulL),m__s9BackGround(NulL),m__ltContentText(NulL),m__ltTitle(NulL){ }//释放变量PopupLayer::~PopupLayer(){    CC_SAFE_RELEASE(m__pMenu);    CC_SAFE_RELEASE(m__sfBackGround);    CC_SAFE_RELEASE(m__ltContentText);    CC_SAFE_RELEASE(m__ltTitle);    CC_SAFE_RELEASE(m__s9BackGround);}


voID PopupLayer::setCallbackFunc(cocos2d::Object *target,SEL_CallFuncN callfun){//menuItem根据调传入的对象,会进行方法的回调    m_callbackListener = target;    m_callback = callfun;    }


bool PopupLayer::init(){             // 初始化需要的 Menu,随后跟进参数向menu中添加Item选项        Menu* menu = Menu::create();        menu->setposition(CCPointZero);        setMenubutton(menu);settouchMode(touch::dispatchMode::ONE_BY_ONE);auto Listener = EventListenertouchOneByOne::create();        Listener->setSwallowtouches(true);  Listener->ontouchBegan = [](touch *t,Event *e){cclog("PopupLayer touch");           return true;    };	_eventdispatcher->addEventListenerWithSceneGraPHPriority(Listener,this);//屏蔽下层事件响应	return true;}


根据参数,标题,tag ,图片效果,添加MenuItem选项bool PopupLayer::addbutton(const char *normalimage,const char *selectedImage,const char *Title,int tag){Size winSize = CCDirector::getInstance()->getWinSize();    Point pCenter = ccp(winSize.wIDth / 2,winSize.height / 2);    // 创建MenuItem按钮,并设置回调方法    MenuItemImage* menuImage = MenuItemImage::create(normalimage,selectedImage,this,menu_selector(PopupLayer::buttonCallback));    menuImage->setTag(tag);    menuImage->setposition(pCenter);    // 给MenuItem添加文字说明并设置在MenuItem中位置Size imenu = menuImage->getContentSize();    LabelTTF* ttf = LabelTTF::create(Title,"",20);    ttf->setcolor(ccc3(0,0));    ttf->setposition(ccp(imenu.wIDth / 2,imenu.height / 2));    menuImage->addChild(ttf);    getMenubutton()->addChild(menuImage);    return true;

现在来看MenuItem的回调方法buttonCallback


voID PopupLayer::buttonCallback(cocos2d::CCObject *pSender){    Node* node = dynamic_cast<Node*>(pSender);    cclog("touch tag: %d",node->getTag());    if (m_callback && m_callbackListener){        (m_callbackListener->*m_callback)(node);//这会调用setCallbackFunc()方法传入的MenuScene对象的quitbuttonCallback()方法    }    this->removeFromParent();//把对话框从父节点移除 }

对话框d出前调用onEnter方法进行界面初始化工作

voID PopupLayer::onEnter(){…………………..    Size contentSize;    // 设置对话框背景,代码省略    // 添加按钮,并设置其位置    this->addChild(getMenubutton());    float btnWIDth = contentSize.wIDth / (getMenubutton()->getChildrenCount() + 1);Vector<Node*> vecArray = getMenubutton()->getChildren();	int j=0;	for(auto it=vecArray.begin();it!=vecArray.end();it++)	{		Node* node = dynamic_cast<Node*>(*it);		node->setposition(Point(winSize.wIDth/2 - contentSize.wIDth/2+btnWIDth*(j+1),winSize.height/2-contentSize.height/3));		j++;	}    // 显示对话框标题内容省略    // 添加对话框d出效果    Action* popupLayer = Sequence::create(Scaleto::create(0.0,0.0),Scaleto::create(0.15,1.05),Scaleto::create(0.08,0.95),1.0),NulL);   this->runAction(popupLayer);}

代码写的稍微多了些,为便于测试,我把代码上传一下,下载地址如下:

http://download.csdn.net/detail/lIDeguo1979/8263669

未完待续……………………………

总结

以上是内存溢出为你收集整理的Cocos2d-x 3.2 大富翁游戏项目开发-第四部分 退出对话框全部内容,希望文章能够帮你解决Cocos2d-x 3.2 大富翁游戏项目开发-第四部分 退出对话框所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/web/1022409.html

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

发表评论

登录后才能评论

评论列表(0条)

保存