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

来源:互联网 发布:淘宝付款不发货骗术 编辑:程序博客网 时间:2024/04/30 10:12

版本: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