在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