加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2dx导出的json转c++代码

发布时间:2020-12-14 16:28:47 所属栏目:百科 来源:网络整理
导读:虽然2dx提供了CocoStudio界面编辑工具,但是他并非一个开源产品,没有提供原码修改,更做不到像vs一样的控件集成。在一个界面设计完成后,往往要把相关的界面上的东西转成相对应的原码基本都是一至的,这些动作繁琐而又没有意思看如下代码等: _Panel = stat

虽然2dx提供了CocoStudio界面编辑工具,但是他并非一个开源产品,没有提供原码修改,更做不到像vs一样的控件集成。在一个界面设计完成后,往往要把相关的界面上的东西转成相对应的原码基本都是一至的,这些动作繁琐而又没有意思看如下代码等:

_Panel = static_cast<Layout*>(extension::GUIReader::shareReader()->widgetFromJsonFile("DemoShop.ExportJson"));
this->addWidget(_Panel);
_Panel_shop_ScrollView = static_cast<ScrollView*>(Helper::seekWidgetByName(_Panel,"shop_ScrollView"));
_Panel_shop_ScrollView->addTouchEventListener(this,toucheventselector(CDemoShop::Panel_shop_ScrollView_touchEvent));


看这些代码又有一些相关类似外,无非就是把json文件解析,然后一一对到对应控件,获得对应地址等。与其在上面花费大量无用时间写这些代码。考虑做一个代码转换工作

代码如下:

// exportjson2cpp.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <string> #include <fstream> #include <iostream> #include <vector> #include <stdlib.h> #include <assert.h> #include <map> #include <stdio.h> #include <json/json.h> #include <dwxmlfile.h> #include <dwhashmap.h> #include <algorithm> using namespace std; using namespace DWDP; //const TCHAR* DWGetModulePath() //{ // static TCHAR szPath[DW_MAX_PATH]; // static bool bFirstTime = true; // if (bFirstTime) // { //#if (defined(WIN32) || defined(WIN64)) // bFirstTime = false; // GetModuleFileName(NULL,(TCHAR*)szPath,sizeof(szPath)); // TCHAR *p = _tcsrchr(szPath,_DWT('')); // *p = _DWT(''); // _tcscat(szPath,_DWT("")); //#else // CHAR szTmp[DW_MAX_PATH]; // getcwd(szTmp,sizeof(szTmp)); // CHAR szTempPath[DW_MAX_PATH]; // sprintf(szTempPath,"%s/",szTmp); // _DWTStrncpy(szPath,_DWTA2T(szTempPath),DW_MAX_PATH); //#endif // // } // return szPath; //} #define CC_LOOP_DOdo{ #define CC_LOOP_WHILE(condition)}while(condition); #define CC_LOOP_WHILE_START(condition)while(condition){ #define CC_LOOP_WHILE_END}; #define CC_LOOP_FOR_START(condition)for(condition){ #define CC_LOOP_FOR_END}; #define CC_LOOP_BREAK(condition)if(condition)break; #define CC_LOOP_BREAK_EXPRESSION(condition,Expression) if(condition) { Expression; break; } #define CC_LOOP_CONTINUE(condition)if(condition)continue; #define CC_LOOP_RETURN(condition,Expression) if(condition) { return Expression; } struct SNodeProp; typedef vector<SNodeProp*> CNodePropVec; typedef CNodePropVec::iterator CNodePropVecItr; struct SNodeProp { SNodeProp() { classname= ""; name= ""; objecttag=0; _vecUIProp.clear(); _vecGObjects.clear(); _vecComs.clear(); parent= NULL; } stringclassname; stringname; intobjecttag; CNodePropVec_vecUIProp; CNodePropVec_vecGObjects; CNodePropVec_vecComs; SNodeProp*parent; }; FILE*pfH = NULL; FILE*pfCPP = NULL; boolbNet = false; boolbcsd = false; boolg_bUI = false; stringg_path = ""; stringg_strClassName= ""; bool LoadUIJson(string strFile,SNodeProp *pstProp); bool ParseUIJsonChildren(Json::Value childrens,SNodeProp *pstProp); bool WriteUI(string strFile,SNodeProp *pstProp); std::string getGUIClassName(const std::string &_classname) { const char* classname = _classname.c_str(); std::string convertedClassName = classname; if (classname && strcmp(classname,"Button") == 0) { convertedClassName = "Button"; } else if (classname && strcmp(classname,"CheckBox") == 0) { convertedClassName = "CheckBox"; } else if (classname && strcmp(classname,"Label") == 0) { convertedClassName = "Label"; } else if (classname && strcmp(classname,"LabelAtlas") == 0) { convertedClassName = "LabelAtlas"; } else if (classname && strcmp(classname,"LoadingBar") == 0) { convertedClassName = "LoadingBar"; } else if (classname && strcmp(classname,"ScrollView") == 0) { convertedClassName = "ScrollView"; } else if (classname && strcmp(classname,"TextArea") == 0) { convertedClassName = "Label"; } else if (classname && strcmp(classname,"TextButton") == 0) { convertedClassName = "Button"; } else if (classname && strcmp(classname,"TextField") == 0) { convertedClassName = "TextField"; } else if (classname && strcmp(classname,"ImageView") == 0) { convertedClassName = "ImageView"; } else if (classname && strcmp(classname,"Panel") == 0) { convertedClassName = "Layout"; } else if (classname && strcmp(classname,"Slider") == 0) { convertedClassName = "Slider"; } else if (classname && strcmp(classname,"LabelBMFont") == 0) { convertedClassName = "LabelBMFont"; } else if (classname && strcmp(classname,"DragPanel") == 0) { convertedClassName = "ScrollView"; } else if(classname && strcmp(classname,"DragPanel") == 0 ) { convertedClassName = "Node"; } else if(classname && strcmp(classname,"SimpleAudio") == 0) { convertedClassName = "Node"; } else if(classname && strcmp(classname,"SingleNode") == 0) { convertedClassName = "Node"; } return convertedClassName; } bool LoadUIJson(string strFile,SNodeProp *pstProp) { ifstream file(strFile.c_str()); if(!file.is_open()) { printf("Parse error"); return false; } Json::Value Panel; Json::Reader reader; if(!reader.parse(file,Panel,false)) { printf("Parse error"); return false; } if(!Panel["widgetTree"].isObject()) { printf("Parse error"); return false; } Json::Value widgetTree = Panel["widgetTree"]; Json::Value options = widgetTree["options"]; //解析返回的状态码 if(!options["classname"].isString()) { printf("Parse error"); return false; } if(!options["name"].isString()) { printf("Parse error"); return false; } if(!widgetTree["children"].isArray()) { printf("Parse error"); return false; } pstProp->classname = options["classname"].asString(); pstProp->name = options["name"].asString(); ParseUIJsonChildren(widgetTree["children"],pstProp); pstProp->classname = getGUIClassName(pstProp->classname); return true; } bool ParseUIJsonChildren(Json::Value childrens,SNodeProp *pstProp) { if(!childrens.isArray()) { printf("Parse error"); return false; } for(int idx = 0; idx < childrens.size(); idx++) { Json::Value children = childrens[idx]; if(!children.isObject()) { printf("Parse error"); return false; } //解析返回的状态码 if(!children["classname"].isString()) { printf("Parse error"); return false; } Json::Value options = children["options"]; SNodeProp *_pstProp = new SNodeProp;; _pstProp->parent = pstProp; _pstProp->classname= options["classname"].asString(); _pstProp->name= options["name"].asString(); ParseUIJsonChildren(children["children"],_pstProp); _pstProp->classname = getGUIClassName(_pstProp->classname); pstProp->_vecUIProp.push_back(_pstProp); } return true; } bool WritePropFun2H(string parent,SNodeProp *pstProp) { CC_LOOP_DO CC_LOOP_BREAK(parent == "") if(pstProp->classname == "Button") { //默认 fprintf(pfH,"void %s_%s_touchEvent(Ref* pSender,TouchEventType type);n",parent.c_str(),pstProp->name.c_str()); } else if(pstProp->classname == "CheckBox") { fprintf(pfH,"void %s_%s_selected(Ref* pSender,CheckBox::EventType type);n",pstProp->name.c_str()); } else if(pstProp->classname == "ImageView") { //默认 fprintf(pfH,pstProp->name.c_str()); } else if(pstProp->classname == "LabelAtlas") { //默认 fprintf(pfH,pstProp->name.c_str()); } else if(pstProp->classname == "LabelBMFont") { //默认 fprintf(pfH,pstProp->name.c_str()); } else if(pstProp->classname == "LoadingBar") { //默认 fprintf(pfH,pstProp->name.c_str()); } else if(pstProp->classname == "Slider") { //默认 fprintf(pfH,pstProp->name.c_str()); } else if(pstProp->classname == "Label") { //默认 fprintf(pfH,pstProp->name.c_str()); } else if(pstProp->classname == "TextField") { //默认 fprintf(pfH,"void %s_%s_textFieldEvent(Ref* pSender,TextField::EventType type);n",pstProp->name.c_str()); } else if(pstProp->classname == "Layout") { //默认 fprintf(pfH,pstProp->name.c_str()); } else if(pstProp->classname == "ScrollView") { //默认 fprintf(pfH,pstProp->name.c_str()); } else if(pstProp->classname == "ListView") { fprintf(pfH,"void %s_%s_selectedItemEvent(Ref* pSender,ListView::EventType type);n",pstProp->name.c_str()); fprintf(pfH,"void %s_%s_selectedItemEventScrollView(Ref* pSender,ui::ScrollView::EventType type);n",pstProp->name.c_str()); } else if(pstProp->classname == "PageView") { fprintf(pfH,"void %s_%s_pageViewEvent(Ref *pSender,PageView::EventType type);n",pstProp->name.c_str()); } else if(pstProp->classname == "CustomImageView") { //默认 fprintf(pfH,pstProp->name.c_str()); } else if(pstProp->classname == "CustomParticleWidget") { //默认 fprintf(pfH,pstProp->name.c_str()); } else { //默认 fprintf(pfH,pstProp->name.c_str()); } CC_LOOP_WHILE(0) for(CNodePropVecItr itr = pstProp->_vecUIProp.begin(); itr != pstProp->_vecUIProp.end(); itr++) { if (parent == "") { WritePropFun2H(pstProp->name,*itr); } else { WritePropFun2H(parent + "_" + pstProp->name,*itr); } } for(CNodePropVecItr itr = pstProp->_vecGObjects.begin(); itr != pstProp->_vecGObjects.end(); itr++) { if (parent == "") { WritePropFun2H(pstProp->name,*itr); } } for(CNodePropVecItr itr = pstProp->_vecComs.begin(); itr != pstProp->_vecComs.end(); itr++) { if (parent == "") { WritePropFun2H(pstProp->name,*itr); } } return true; } bool WriteProp2H(string parent,SNodeProp *pstProp) { if (parent == "") { fprintf(pfH,"%-25s*_%s;n",pstProp->classname.c_str(),pstProp->name.c_str()); } else { fprintf(pfH,"%-25s*_%s_%s;n",pstProp->name.c_str()); } for(CNodePropVecItr itr = pstProp->_vecUIProp.begin(); itr != pstProp->_vecUIProp.end(); itr++) { if (parent == "") { WriteProp2H(pstProp->name,*itr); } else { WriteProp2H(parent + "_" + pstProp->name,*itr); } } for(CNodePropVecItr itr = pstProp->_vecComs.begin(); itr != pstProp->_vecComs.end(); itr++) { if (parent == "") { WriteProp2H(pstProp->name,*itr); } } for(CNodePropVecItr itr = pstProp->_vecGObjects.begin(); itr != pstProp->_vecGObjects.end(); itr++) { if (parent == "") { WriteProp2H(pstProp->name,*itr); } } return true; } bool WritePropInit2Cpp(string parent,SNodeProp *pstProp) { static string ps = ""; if (parent == "") { fprintf(pfCPP,"%s_%s(nullptr)n",ps.c_str(),pstProp->name.c_str()); } else { fprintf(pfCPP,"%s_%s_%s(nullptr)n",pstProp->name.c_str()); } ps = ","; for(CNodePropVecItr itr = pstProp->_vecUIProp.begin(); itr != pstProp->_vecUIProp.end(); itr++) { if (parent == "") { WritePropInit2Cpp(pstProp->name,*itr); } else { WritePropInit2Cpp(parent + "_" + pstProp->name,*itr); } } for(CNodePropVecItr itr = pstProp->_vecComs.begin(); itr != pstProp->_vecComs.end(); itr++) { if (parent == "") { WritePropInit2Cpp(pstProp->name,*itr); } } for(CNodePropVecItr itr = pstProp->_vecGObjects.begin(); itr != pstProp->_vecGObjects.end(); itr++) { if (parent == "") { WritePropInit2Cpp(pstProp->name,*itr); } } return true; } bool Write2InitCpp(string parent,SNodeProp *pstProp,bool bUI) { CC_LOOP_DO CC_LOOP_BREAK(parent == "") ////////////////////////////////////////////////////////////////////////// if(pstProp->classname == "Button") { fprintf(pfCPP,"_%s_%s = dynamic_cast<%s*>(Helper::seekWidgetByName(_%s,"%s"));n",pstProp->name.c_str(),pstProp->name.c_str()); //默认 fprintf(pfCPP,"_%s_%s->addTouchEventListener(this,toucheventselector(%s::%s_%s_touchEvent));n",g_strClassName.c_str(),pstProp->name.c_str()); } else if(pstProp->classname == "CheckBox") { fprintf(pfCPP,pstProp->name.c_str()); fprintf(pfCPP,"_%s_%s->addEventListener(this,toucheventselector(%s::%s_%s_selected));n",pstProp->name.c_str()); } else if(pstProp->classname == "ImageView") { fprintf(pfCPP,pstProp->name.c_str()); } else if(pstProp->classname == "LabelAtlas") { fprintf(pfCPP,pstProp->name.c_str()); } else if(pstProp->classname == "LabelBMFont") { fprintf(pfCPP,pstProp->name.c_str()); } else if(pstProp->classname == "LoadingBar") { fprintf(pfCPP,"_%s_%s->setPercent(0);n",pstProp->name.c_str()); } else if(pstProp->classname == "Slider") { fprintf(pfCPP,pstProp->name.c_str()); } else if(pstProp->classname == "Label") { fprintf(pfCPP,pstProp->name.c_str()); } else if(pstProp->classname == "TextField") { fprintf(pfCPP,toucheventselector(%s::%s_%s_textFieldEvent));n",pstProp->name.c_str()); } else if(pstProp->classname == "Layout") { if (NULL != pstProp->parent && pstProp->parent->classname == "CCComRender") { fprintf(pfCPP,"_%s_%s = dynamic_cast<%s*>(_%s->getNode());n",pstProp->name.c_str()); } if (NULL != pstProp->parent && pstProp->parent->classname == "UILayer") { fprintf(pfCPP,"_%s_%s = dynamic_cast<%s*>(_%s->getWidgetByName("%s"));n",pstProp->name.c_str()); } else { fprintf(pfCPP,pstProp->name.c_str()); } //默认 fprintf(pfCPP,pstProp->name.c_str()); } else if(pstProp->classname == "ScrollView") { fprintf(pfCPP,pstProp->name.c_str()); } else if(pstProp->classname == "ListView") { fprintf(pfCPP,"_%s_%s->addEventListener((ui::ListView::ccListViewCallback)this,toucheventselector(%s::%s_%s_selectedItemEvent));n","_%s_%s->addEventListener((ui::ListView::ccScrollViewCallback)this,toucheventselector(%s::%s_%s_selectedItemEventScrollView,this));n",pstProp->name.c_str()); } else if(pstProp->classname == "PageView") { fprintf(pfCPP,toucheventselector(%s::%s_%s_pageViewEvent));n",pstProp->name.c_str()); } else if(pstProp->classname == "CustomImageView") { fprintf(pfCPP,pstProp->name.c_str()); } else if(pstProp->classname == "CustomParticleWidget") { fprintf(pfCPP,pstProp->name.c_str()); } else if(pstProp->classname == "Sprite") { fprintf(pfCPP,pstProp->name.c_str()); } else if(pstProp->classname == "Node") { fprintf(pfCPP,pstProp->name.c_str()); } ////////////////////////////////////////////////////////////////////////// else if(pstProp->classname == "CCComAudio") { fprintf(pfCPP,"_%s_%s = dynamic_cast<%s*>(_%s->getComponent("%s"));n",pstProp->name.c_str()); } else if(pstProp->classname == "UILayer") { fprintf(pfCPP,"_%s_%s = dynamic_cast<%s*>(dynamic_cast<CCComRender*>(_%s->getComponent("%s"))->getNode());n",pstProp->name.c_str()); } else if (pstProp->classname == "CCSprite" || pstProp->classname == "CCTMXTiledMap" || pstProp->classname == "CCParticleSystemQuad" || pstProp->classname == "CCArmature" || pstProp->classname == "GUIComponent") { fprintf(pfCPP,pstProp->name.c_str()); } else if(pstProp->classname == "CCNode") { fprintf(pfCPP,"_%s_%s = dynamic_cast<%s*>(Helper::seekNodeByTag(_%s,%d));n",pstProp->objecttag); } else { fprintf(pfCPP,pstProp->name.c_str()); } fprintf(pfCPP,"n"); CC_LOOP_WHILE(0) for(CNodePropVecItr itr = pstProp->_vecUIProp.begin(); itr != pstProp->_vecUIProp.end(); itr++) { if (parent == "") { Write2InitCpp(pstProp->name,*itr,true); } else { Write2InitCpp(parent + "_" + pstProp->name,true); } } for(CNodePropVecItr itr = pstProp->_vecComs.begin(); itr != pstProp->_vecComs.end(); itr++) { if (parent == "") { Write2InitCpp(pstProp->name,false); } else { Write2InitCpp(parent + "_" + pstProp->name,false); } } for(CNodePropVecItr itr = pstProp->_vecGObjects.begin(); itr != pstProp->_vecGObjects.end(); itr++) { if (parent == "") { Write2InitCpp(pstProp->name,false); } } return true; } bool WritePropFun2Cpp(string parent,SNodeProp *pstProp) { CC_LOOP_DO CC_LOOP_BREAK(parent == "") ////////////////////////////////////////////////////////////////////////// if(pstProp->classname == "Button") { fprintf(pfCPP,"void %s::%s_%s_touchEvent(Ref* pSender,TouchEventType type)n","{n"); fprintf(pfCPP,"// _%s_%sn","CCLOG("_%s_%s");n","switch (type)n"); fprintf(pfCPP,"case TOUCH_EVENT_BEGAN:n"); fprintf(pfCPP,"break;n"); fprintf(pfCPP,"case TOUCH_EVENT_MOVED:n"); fprintf(pfCPP,"case TOUCH_EVENT_ENDED:n"); fprintf(pfCPP,"case TOUCH_EVENT_CANCELED:n"); fprintf(pfCPP,"default:n"); fprintf(pfCPP,"}n"); fprintf(pfCPP,"}nn"); } else if(pstProp->classname == "CheckBox") { fprintf(pfCPP,"void %s::%s_%s_selected(Ref* pSender,CheckBox::EventType type)n","case CheckBox::EventType::UNSELECTED:n"); fprintf(pfCPP,"case CheckBox::EventType::SELECTED:n"); fprintf(pfCPP,"}nn"); } else if(pstProp->classname == "ImageView") { //默认 fprintf(pfCPP,"}nn"); } else if(pstProp->classname == "LabelAtlas") { //默认 fprintf(pfCPP,"}nn"); } else if(pstProp->classname == "LabelBMFont") { //默认 fprintf(pfCPP,"}nn"); } else if(pstProp->classname == "LoadingBar") { //默认 fprintf(pfCPP,"}nn"); } else if(pstProp->classname == "Slider") { //默认 fprintf(pfCPP,"}nn"); } else if(pstProp->classname == "Label") { //默认 fprintf(pfCPP,"}nn"); } else if(pstProp->classname == "TextField") { //默认 fprintf(pfCPP,"void %s::%s_%s_textFieldEvent(Ref* pSender,TextField::EventType type)n","case TextField::EventType::ATTACH_WITH_IME:n"); fprintf(pfCPP,"case TextField::EventType::DETACH_WITH_IME:n"); fprintf(pfCPP,"case TextField::EventType::INSERT_TEXT:n"); fprintf(pfCPP,"case TextField::EventType::DELETE_BACKWARD:n"); fprintf(pfCPP,"}nn"); } else if(pstProp->classname == "Layout") { //默认 fprintf(pfCPP,"}nn"); } else if(pstProp->classname == "ScrollView") { //默认 fprintf(pfCPP,"}nn"); } else if(pstProp->classname == "ListView") { fprintf(pfCPP,"void %s::%s_%s_selectedItemEvent(Ref* pSender,ListView::EventType type)n","case cocos2d::ui::ListView::EventType::ON_SELECTED_ITEM_START:n"); fprintf(pfCPP,"case cocos2d::ui::ListView::EventType::ON_SELECTED_ITEM_END:n"); fprintf(pfCPP,"}nn"); fprintf(pfCPP,"void %s::%s_%s_selectedItemEventScrollView(Ref* pSender,ui::ScrollView::EventType type)n","// _%sn","case ui::ScrollView::EventType::SCROLL_TO_BOTTOM:n"); fprintf(pfCPP,"case ui::ScrollView::EventType::SCROLL_TO_TOP:n"); fprintf(pfCPP,"}nn"); } else if(pstProp->classname == "PageView") { fprintf(pfCPP,"void %s::%s_%s_pageViewEvent(Ref* pSender,PageView::EventType type)n","case PageView::EventType::TURNING:n"); fprintf(pfCPP,"}nn"); } else if(pstProp->classname == "CustomImageView") { //默认 fprintf(pfCPP,"}nn"); } else if(pstProp->classname == "CustomParticleWidget") { //默认 fprintf(pfCPP,"}nn"); } else { //默认 fprintf(pfCPP,"}nn"); } fprintf(pfCPP,"n"); CC_LOOP_WHILE(0) for(CNodePropVecItr itr = pstProp->_vecUIProp.begin(); itr != pstProp->_vecUIProp.end(); itr++) { if (parent == "") { WritePropFun2Cpp(pstProp->name,*itr); } else { WritePropFun2Cpp(parent + "_" + pstProp->name,*itr); } } for(CNodePropVecItr itr = pstProp->_vecGObjects.begin(); itr != pstProp->_vecGObjects.end(); itr++) { if (parent == "") { WritePropFun2Cpp(pstProp->name,*itr); } } for(CNodePropVecItr itr = pstProp->_vecComs.begin(); itr != pstProp->_vecComs.end(); itr++) { if (parent == "") { WritePropFun2Cpp(pstProp->name,*itr); } } return true; } bool ParseSceneJsonChildren(Json::Value childrens,SNodeProp *pstProp); bool LoadSceneJson(string strFile,SNodeProp *pstProp) { ifstream file(strFile.c_str()); assert(file.is_open()); Json::Value Root; Json::Reader reader; if(!reader.parse(file,Root,false)) { printf("Parse error"); return false; } ParseSceneJsonChildren(Root,pstProp); return true; } bool ParseSceneJsonChildren(Json::Value childrens,SNodeProp *pstProp) { pstProp->classname= childrens["classname"].asString(); pstProp->name= childrens["name"].asString(); pstProp->objecttag= childrens["objecttag"].asInt(); if(strcmp(pstProp->classname.c_str(),"CCNode") != 0) { return true; } if (pstProp->name == "") { pstProp->name = pstProp->classname; } if(childrens["components"].isArray()) { for(int idx = 0; idx < childrens["components"].size(); idx++) { Json::Value children = childrens["components"][idx]; if(!children.isObject()) { printf("Parse error"); return false; } SNodeProp *_pstProp = new SNodeProp;; _pstProp->parent = pstProp; _pstProp->classname= children["classname"].asString(); _pstProp->name= children["name"].asString(); if (_pstProp->classname == "CCSprite" || _pstProp->classname == "CCTMXTiledMap" || _pstProp->classname == "CCParticleSystemQuad" || _pstProp->classname == "CCArmature") { ////////////////////////////////////////////////////////////////////////// } else if (_pstProp->classname == "GUIComponent") { SNodeProp *pstProp = new SNodeProp; pstProp->parent = _pstProp; Json::Value fileData = children["fileData"]; //解析返回的状态码 if(fileData["path"].isString()) { string dirpath = g_path; string _path = fileData["path"].asString(); int num = 10; while(num--) { string path = dirpath + _path; if (LoadUIJson(path,pstProp)) { break; } printf("%s not found n",path.c_str()); size_t pos = dirpath.find_last_of(''); dirpath= dirpath.substr(0,pos); pos = dirpath.find_last_of(''); dirpath= dirpath.substr(0,pos + 1); } _pstProp->_vecUIProp.push_back(pstProp); } _pstProp->classname = "UILayer"; } else if (_pstProp->classname == "CCComAudio" || _pstProp->classname == "CCBackgroundAudio") { _pstProp->classname = "CCComAudio"; } else if (_pstProp->classname == "CCComController") { _pstProp->classname = "CCComController"; } else if (_pstProp->classname == "CCComAttribute") { _pstProp->classname = "CCComAttribute"; } //else if (_pstProp->classname == "CCScene") //{ // _pstProp->classname = "CCScene"; //} else { continue; } pstProp->_vecComs.push_back(_pstProp); } } if(childrens["gameobjects"].isArray()) { for(int idx = 0; idx < childrens["gameobjects"].size(); idx++) { Json::Value children = childrens["gameobjects"][idx]; if(!children.isObject()) { printf("Parse error"); return false; } SNodeProp *_pstProp = new SNodeProp;; _pstProp->parent = pstProp; ParseSceneJsonChildren(children,_pstProp); pstProp->_vecGObjects.push_back(_pstProp); } } return true; } ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// bool Write2H(string strFile,SNodeProp *pstProp) { int dwPos = strFile.rfind(''); string strFilePath = strFile.substr(0,dwPos + 1); string strFileName = strFile.substr(dwPos + 1,strFile.size()); dwPos = strFileName.rfind('.'); string strBassName = strFileName.substr(0,dwPos); string strH = strFilePath + strBassName + ".h"; pfH = fopen(strH.c_str(),"w"); if(NULL == pfH) { return false; } string strHEAD_LINE = "__" + strBassName + "_" + "H" + "__"; transform(strHEAD_LINE.begin(),strHEAD_LINE.end(),strHEAD_LINE.begin(),::toupper); g_strClassName = "C" + strBassName; ////////////////////////////////////////////////////////////////////////// fprintf(pfH,"#ifndef %sn#define %snn",strHEAD_LINE.c_str(),strHEAD_LINE.c_str()); fprintf(pfH,"#include "cocos2d.h"n"); //2.2.6 fprintf(pfH,"#include "cocos-ext.h"n"); //end 2.2.6 //2.2.6 //fprintf(pfH,"#include "ui/CocosGUI.h"n"); //fprintf(pfH,"#include "cocostudio/CocoStudio.h"n"); //end 2.2.6 if(bNet) { fprintf(pfH,"#include "MGInclude.h"n"); fprintf(pfH,"#include "MGNetConnection.h"n"); fprintf(pfH,"#include "MGNetCmdHandler.h"nnn"); } fprintf(pfH,"USING_NS_CC;n"); //fprintf(pfH,"USING_NS_CC_EXT;n"); fprintf(pfH,"using namespace ui;n"); //fprintf(pfH,"using namespace MyGame;n"); fprintf(pfH,"using namespace extension;nnn"); fprintf(pfH,"typedef UILayer Layer;n"); fprintf(pfH,"typedef CCObject Ref;n"); fprintf(pfH,"typedef CCScene Scene;n"); fprintf(pfH,"typedef UIHelper Helper;nnn"); if(bNet) { fprintf(pfH,"class %s : public Layer,public MGNetCmdHandlern",g_strClassName.c_str()); } else { fprintf(pfH,"class %s : public Layern",g_strClassName.c_str()); } fprintf(pfH,"{n"); fprintf(pfH,"public:n"); fprintf(pfH,"%s();n",g_strClassName.c_str()); fprintf(pfH,"~%s();n","bool init();n"); WritePropFun2H("",pstProp); if(bNet) { fprintf(pfH,"protected:n"); fprintf(pfH,"virtual bool canProcess(ActionCode_t code);n"); fprintf(pfH,"virtual void proccessDatas(MGNetDataReader * reader);n"); fprintf(pfH,"virtual void netSendDatasFailed(MGNetDataWriter * writer);n"); } fprintf(pfH,"static Scene* createScene() n"); fprintf(pfH,"{ n"); fprintf(pfH,"Scene* pScene = Scene::create(); n"); fprintf(pfH,"%s* uiLayer = new (std::nothrow) %s(); n","if (uiLayer && uiLayer->init()) n"); fprintf(pfH,"uiLayer->autorelease(); n"); fprintf(pfH,"pScene->addChild(uiLayer); n"); fprintf(pfH,"} n"); fprintf(pfH,"else n"); fprintf(pfH,"CC_SAFE_DELETE(uiLayer); n"); fprintf(pfH,"return pScene; n"); fprintf(pfH,"}n"); fprintf(pfH,"protected:n"); WriteProp2H("",pstProp); fprintf(pfH,"};nnn"); fprintf(pfH,"#endif /* defined(%s) */",strHEAD_LINE.c_str()); return true; } bool Write2Cpp(string strFile,dwPos); string strCPP = strFilePath + strBassName + ".cpp"; pfCPP = fopen(strCPP.c_str(),"w"); if(NULL == pfCPP) { return false; } ////////////////////////////////////////////////////////////////////////// fprintf(pfCPP,"#include "%s.h"n",strBassName.c_str()); //fprintf(pfCPP,"#include "extensions/cocos-ext.h"nnn"); fprintf(pfCPP,"%s::%s()n",g_strClassName.c_str()); fprintf(pfCPP,":"); WritePropInit2Cpp("",pstProp); fprintf(pfCPP,"{n"); if(bNet) { fprintf(pfCPP,"MGNetConnection::sharedConnection()->registerCmdHandler(this);n"); } fprintf(pfCPP,"}nn"); fprintf(pfCPP,"%s::~%s()n","MGNetConnection::sharedConnection()->unregisterCmdHandler(this);n"); } fprintf(pfCPP,"bool %s::init()n","{n"); fprintf(pfCPP,"if (Layer::init())n"); fprintf(pfCPP,"{n"); if(bcsd) { if (g_bUI) { fprintf(pfCPP,"_%s = dynamic_cast<%s*>(CSLoader::createNode("%s"));n",strFileName.c_str()); fprintf(pfCPP,"this->addWidget(_%s);nnn",pstProp->name.c_str()); } else { } } else { if (g_bUI) { fprintf(pfCPP,"_%s = dynamic_cast<Layout*>(extension::GUIReader::shareReader()->widgetFromJsonFile("%s"));n","_%s = dynamic_cast<CCNode*>(extension::SceneReader::sharedSceneReader()->createNodeWithSceneFile("%s"));n","this->addChild(_%s);nnn",pstProp->name.c_str()); } } Write2InitCpp("",pstProp,true); fprintf(pfCPP,"return true;n"); fprintf(pfCPP,"}n"); fprintf(pfCPP,"return false;n"); fprintf(pfCPP,"}nn"); if(bNet) { fprintf(pfCPP,"bool %s::canProcess(ActionCode_t code)n",g_strClassName.c_str()); fprintf(pfCPP,"return true;n"); fprintf(pfCPP,"void %s::proccessDatas(MGNetDataReader * reader)n","{nn"); fprintf(pfCPP,"void %s::netSendDatasFailed(MGNetDataWriter * writer)n","}nn"); } WritePropFun2Cpp("",pstProp); return true; } int _tmain(int argc,_TCHAR* argv[]) { if(argc < 2) { cout << "Usage:" << argv[0] << " [ExportJson file path] " << " [net -n]" << endl; return -1; } if(argc >= 3) { string strNet = argv[2]; if(strNet == "-n") { bNet = true; } } string _path = (char*)argv[1]; size_t pos = _path.find_last_of(''); g_path= _path.substr(0,pos + 1); if (g_path == "") { g_path = DWGetModulePath(); } pos= _path.find_last_of('.'); std::string suffix = _path.substr(pos + 1,_path.length()); if(suffix == "json") { g_bUI = false; SNodeProp *pstProp = new SNodeProp; LoadSceneJson(_path,pstProp); Write2H(_path,pstProp); Write2Cpp(_path,pstProp); } else if (suffix == "ExportJson") { g_bUI = true; SNodeProp *pstProp = new SNodeProp; LoadUIJson(_path,pstProp); } return 0; }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读