开发环境:
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 );
}