今天又遇到了一个坑,我抓狂!
直接开始 ↓
- 首先要从cocostudio编辑的UI中获取到按钮组件:
先在.cpp文件中加头文件#include "ui\CocosGUI.h"
和using namespace ui;
注意:
using namespace ui;要写在“USING_NS_CC;”下面(我也不知道为啥)
// 完整头文件
#include "HelloWorldScene.h"
#include "SimpleAudioEngine.h"
#include "cocostudio/CocoStudio.h"
#include "ui\CocosGUI.h"
USING_NS_CC;
using namespace ui;
接下来才要获取按钮:
// 用Btn获取按钮
Button* Btn = (Button*)UI->getChildByName("Button_4");
- 因为点击按钮是要对图片进行操作,所以还要获取图片组件,同样:
我先在.h中进行声明:ImageView* letter;
然后再获取letter = (ImageView*)UI->getChildByName("Image_2");
- 接下来是添加按钮的点击事件
// 按钮点击事件
Btn->addTouchEventListener([&](Ref* sender, Widget::TouchEventType type) {
switch (type)
{
case ui::Widget::TouchEventType::BEGAN://单击事件开始时触发(按下的时候)
break;
case ui::Widget::TouchEventType::ENDED://按下之后,然后松开时触发(用的最多)
//对图片进行操作
if (letter->isVisible()) {
letter->setVisible(false);
log("true");
}else {
log("false");
letter->setVisible(true);
}
break;
case ui::Widget::TouchEventType::MOVED://按下之后,进行移动操作时触发
break;
case ui::Widget::TouchEventType::CANCELED://因为一些特殊情况而中断时触发
break;
default:
break;
}
});
.cpp文件完整代码
#include "HelloWorldScene.h"
#include "SimpleAudioEngine.h"
#include "cocostudio/CocoStudio.h"
#include "ui\CocosGUI.h"
USING_NS_CC;
using namespace ui;//要写在USING_NS_CC;下面??
Scene* HelloWorld::createScene()
{
return HelloWorld::create();
}
// Print useful error message instead of segfaulting when files are not there.
static void problemLoading(const char* filename)
{
printf("Error while loading: %s\n", filename);
printf("Depending on how you compiled you might have to add 'Resources/' in front of filenames in HelloWorldScene.cpp\n");
}
// on "init" you need to initialize your instance
bool HelloWorld::init()
{
if ( !Scene::init() )
{
return false;
}
//加载UI
auto *UI = cocostudio::GUIReader::getInstance()->widgetFromJsonFile("UI/HelloUI.ExportJson");
this->addChild(UI);
//获取图片
letter = (ImageView*)UI->getChildByName("Image_2");
//获取按钮
Button* Btn = (Button*)UI->getChildByName("Button_4");
//按钮点击事件
Btn->addTouchEventListener([&](Ref* sender, Widget::TouchEventType type) {
switch (type)
{
case ui::Widget::TouchEventType::BEGAN://单击事件开始时触发(按下的时候)
break;
case ui::Widget::TouchEventType::ENDED://按下之后,然后松开时触发(用的最多)
if (letter->isVisible()) {
letter->setVisible(false);
log("true");
}else {
log("false");
letter->setVisible(true);
}
break;
case ui::Widget::TouchEventType::MOVED://按下之后,进行移动操作时触发
break;
case ui::Widget::TouchEventType::CANCELED://因为一些特殊情况而中断时触发
break;
default:
break;
}
});
return true;
}
运行
唉~~