在Cocos2D-X中有个CCMessageBox,可以用来创建对话框。
CCMessageBox("this is content","title");
这个在win32和Android上都是通用的,底层都是调用当前系统的对话框,win32效果如下图,在android 上就是调用的系统的Dialog。
对话框虽然简单,不过系统的Dialog不怎么好看,实际开发中一般没人用系统的对话框,一个字,太丑了!我们可以利用CCLayer来自定义一个对话框。
#include "InputWidget.h" InputWidget::InputWidget() { } InputWidget::~InputWidget() { } bool InputWidget::init() { if (!CCLayer::init()) { return false; } mSize=CCDirector::sharedDirector()->getWinSize(); mBg= CCSprite::create("DialogBg.png"); mBg->setPosition(ccp(mSize.width / 2, mSize.height / 2)); this->addChild(mBg); CCLabelTTF* pLabel=CCLabelTTF::create("Are you sure ?","Arial",20); pLabel->setPosition(ccp(mSize.width / 2, mSize.height / 2+40)); this->addChild(pLabel); //创建一个输入框 CCTextFieldTTF* pTextField=CCTextFieldTTF::textFieldWithPlaceHolder("input","Arial",24); pTextField->setPosition(ccp(mSize.width / 2, mSize.height / 2)); pTextField->attachWithIME(); this->addChild(pTextField); CCMenuItemImage *pMenuItem = CCMenuItemImage::create( "BtnOK.png", "BtnOK.png", this, menu_selector(InputWidget::onOK)); pMenuItem->setPosition(ccp(mSize.width / 2, mSize.height / 2-40)); CCMenu* pMenu = CCMenu::create(pMenuItem,NULL); pMenu->setPosition(CCPointZero); this->addChild(pMenu); return true; } void InputWidget::onOK(CCObject* pSender) { this->removeFromParentAndCleanup(true); }
效果图:
效果还是挺不错的,除了素材不好看,,,,PS课程用来补充睡眠了,大家懂的,呵呵,将就着看看吧,
最后还有一个问题,就是如果透明的部分有别的菜单,当我们点击的时候就会发现菜单依然可以点击。对话框还没关闭呢,点别的菜单界面又切换了,这肯定是不行的。
解决办法:屏蔽触摸。
这里给出一个解决方法,就是让Layer吞掉触摸事件。
void InputWidget::registerWithTouchDispatcher(void){ //使用int最小值做最高优先级 CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, INT_MIN , true); } bool InputWidget::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent) { //吞掉触摸事件 return true; } void InputWidget::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent) { } void InputWidget::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent) { } void InputWidget::ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent) { }
这下就可以了,点击试试没有问题。
转载请注明出处:http://blog.csdn.net/Vestigge