Cocos ui控件Button 一个误导人的小错误

版本:cocos2d-x 3.12     语言:C++

 

今天开始996,终于要开始加死人不偿命的生活了。哈哈,今天给大家带来一个我毕设中的小失误。

 

不知道还有没有人在用CocosStudio,我们项目中可怜都没得用,然后都是自己写ui的,别的组已经在使用了,感觉用起来很舒服的,不知道为什么停更了,然后现在只有个js的creator,真不知道触控那帮子人怎么想的。

 

反正在我之前的毕设中,使用到了一个ui界面放了一个Button的控件,来看一下代码(我现在知道怎么插代码了):

Button* button= Button::create("res/HelloWorld.png");
button->setPosition(Vec2(200, 200));
this->addChild(button);
button->addTouchEventListener(this,toucheventselector(SceneTest::touch));

 

这是当然是测试的代码,实际中的代码就不拿出来了。创建了一个Button后,设置了一个常规属性,最后添加了触碰事件。

 

再来看看触碰事件:

void SceneTest::touch(Ref* target,TouchEventType type)
{
    CCLOG("you touch me! you bitch!");
}

 

运行一下:

 

没有任何问题,但是有个挺不爽的地方:

 

虽然可以运行,但是上面警告声明被否决了,毕设期间也不懂,反正就这么过了,这几天又仔细研究了一下。

 

首先来看看另一种的注册方式:

button->addClickEventListener(CC_CALLBACK_1(SceneTest::click, this));

 

使用Click进行注册:

void SceneTest::click(Ref* target)
{
    CCLOG("you love me");
}

 

打印结果:

 

Click只在Ended的时候会触发。好了,没有任何问题。但是addTouchEventListener的方式应该是2.0时代使用的方法,我们现在使用3.0的方法试试:

button->addTouchEventListener(CC_CALLBACK_2(SceneTest::touch, this));

 

发生错误了:

 

一堆,不过我在我自己项目中并不是报这个错误,报的是什么std::invoke为找到重载函数,如果报这个错误的话,我早就解决了,大家仔细看看。

 

没错,把方法这么改写就OK了:

touch(Ref*target,Widget::TouchEventTypetype)

 

Widget::TouchEventType和TouchEventType并不是同一个东西,我晕。

 

昨天draw方法相关的一个标志转换问题解决后,警告大幅度的减少了。今天又解决了这个问题,我想只要耐心这些警告也都不会出现,每次要在100多个警告里面找一个错误实在难受。

 

总结:

UI控件中写回调函数,不要忘记第二个参数是Widget中的TouchEventType,虽然他们的取值是一样的、数量也是一样的、表示的内容也是一样的。用最近流行的话说就是MDZZ。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值