作者:Yunir_944 | 来源:互联网 | 2023-09-06 11:15
版本:cocos2d-x3.12语言:C++今天开始996,终于要开始加死人不偿命的生活了。哈哈,今天给大家带来一个我毕设中的小失误。不知道还有没有人在用CocosSt
版本: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。