又一坑!按钮点击事件

今天又遇到了一个坑,我抓狂!
直接开始 ↓

  • 首先要从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;
}

运行
点击之前
点击后
再点击

唉~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值