1.创建项目后环境配置:
附加文件夹:加入
$(EngineRoot)
$(EngineRoot)cocos
$(EngineRoot)cocos\editor-support
$(EngineRoot)build\Debug.win32
..\proj.win32
通用属性加入
(先从 cocos2d-x-3.0rc0 中 extensions cocos\editor-support cocos\ui 加入进去)
libcocosstudio
libExtensions
libGUI
链接器 附加依赖项:
libGUI.lib
libCocosStudio.lib
libExtensions.lib
头文件的加入:
这些都放在头文件中
#include "cocos2d.h"
#include "ui\CocosGUI.h"
#include "cocos-ext.h"
#include "ui\UIButton.h"
#include "cocostudio\CocoStudio.h"
#include "editor-support\cocostudio\CCSGUIReader.h"
#include <iostream>
using namespace std;
using namespace cocos2d;
using namespace cocostudio;
using namespace ui;
在init中就能够将外部建好的场景倒入进来
auto m_layout = cocostudio::GUIReader::getInstance()->widgetFromJsonFile("login_ui\\NewUI_1.ExportJson");
this->addChild(m_layout);
场景中的button和代码链接UI_BUTTON_LOGIN是在外部场景中的tag值
Button* startBtn = dynamic_cast<Button*>(m_layout->getChildByTag(UI_BUTTON_LOGIN));
startBtn->addTouchEventListener(this,toucheventselector(HelloWorld::touchButton));
场景中的中文字符的显示:
wstring HelloWorld::charToWstring(const char* c)
{
wstring ws;
int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);
wchar_t* m_wchar=new wchar_t[len+1];
MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);
m_wchar[len]='\0';
ws.append(m_wchar);
return ws;
}
inline std::string WideByte2UTF8(const wstring& text)
{
int asciisize = ::WideCharToMultiByte(CP_UTF8, 0, text.c_str(), text.size(), NULL, 0, NULL, NULL);
if (asciisize == ERROR_NO_UNICODE_TRANSLATION ||
asciisize == 0)
{
return string();
}
char* resultstring = new char[asciisize];
int convresult = ::WideCharToMultiByte(CP_UTF8, 0, text.c_str(), text.size(), resultstring, asciisize, NULL, NULL);
if (convresult != asciisize)
{
return string();
}
std::string buffer(resultstring, convresult);
delete[] resultstring;
return buffer;
}
button切换场景
void HelloWorld::touchButton(Ref* obj,TouchEventType eventype)
{
Scene* pScene = ui_login_tag::createScene();
Director::sharedDirector()->replaceScene(pScene);
}
加入动画:
ArmatureDataManager::getInstance()->addArmatureFileInfo("MyAnimation.ExportJson");
Armature* armature = Armature::create("MyAnimation");
armature->setTag(AM_MYANIMATION);
armature->setPosition(Point(visibleSize.width/2,visibleSize.height/2));
this->addChild(armature);
button播放动画
auto armature = (Armature*)getChildByTag(AM_MYANIMATION);
switch (type)
{
case TouchEventType::TOUCH_EVENT_ENDED:
if(tag == UI_BUTTON_BUTTON_PLAY1)
{
armature->getAnimation()->play("hit");
}else if(tag == UI_BUTTON_BUTTON_PLAY2)
{
armature->getAnimation()->play("fall");
}
break;
default:
break;
}