【Cocos2D-X 】初窥门径(12)游戏中的对话框

在Cocos2D-X中有个CCMessageBox,可以用来创建对话框。

 

CCMessageBox("this is content","title");

这个在win32和Android上都是通用的,底层都是调用当前系统的对话框,win32效果如下图,在android 上就是调用的系统的Dialog。

 

【Cocos2D-X 】初窥门径(12)游戏中的对话框


对话框虽然简单,不过系统的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);

}

 

 

效果图:

【Cocos2D-X 】初窥门径(12)游戏中的对话框


效果还是挺不错的,除了素材不好看,,,,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





 

你可能感兴趣的:(cocos2d-x)