开发环境:

Xcode

Cocos Studio v1.0.0.0(mac版)

Cocos2d-x-2.2.5

1.使用Cocos Studio编辑一个界面,对话框的样子。具体怎么编辑,去找其他的文档。

2.将编辑好的工程导出,去Cocos Studio项目下面找到Export文件夹,下面就是导出的文件,生成一个json文件和一些图片资源。复制到Cocos2d-x工程的Resources目录下面。将新增加的资源文件添加到项目中。

3.在代码中加载对话框

CCNode *rootNode = cocostudio::timeline::NodeReader::getInstance()->createNode("Test_1.json");
this->addChild(rootNode);

不出意外的话,应该就可以看到对话框了。

4.注意注意

上面的代码只是显示对话框,其实很多对话框都是点不穿的,人家说是模态对话框。

这个的实现方法就是让对话框把触摸事件吞噬即可。

头文件加上

void registerWithTouchDispatcher() ;
bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent) ;

cpp文件里面这样处理:

void HelloWorld::registerWithTouchDispatcher()
{
	CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate( this, -128, true );
}

bool HelloWorld::ccTouchBegan( cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent )
{
	return true;
}

但是问题来了,吞了触摸事件,对话框上的控件也不能操作了

对,这时候就需要设置触摸的优先级。

由于Cocos Studio里面的控件都是继承自Widget的,而Widget继承自CCNodeRGBA的,所以无法直接设置控件优先级。

我跟着代码看,Widget的触摸事件是由TouchGroup分发的。所以只需要设置TouchGroup的触摸优先级就可以。

至于说怎么知道是TouchGroup分发的,就是断点调试,大家都会的。控件是在上面读取json文件加载是被加入到TouchGroup的。

for ( int i = 0; i < rootNode->getChildrenCount(); i++ )
{
	TouchGroup*touchGroup = static_cast<TouchGroup*>(rootNode->getChildren()->objectAtIndex( i ) );
	touchGroup->setTouchPriority( -130 );
}