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

在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





原文地址:https://www.cnblogs.com/javawebsoa/p/3027289.html