gpt4 book ai didi

c++ - cocos 2d-x添加触摸事件回调报错

转载 作者:行者123 更新时间:2023-11-28 02:09:32 28 4
gpt4 key购买 nike

我有一个 cocos2d-x 场景和上面的 Button。我尝试添加触摸事件监听器并为其提供回调函数:

preloadScene.h:

...
public:
virtual void Do(Touch* touch, Event* event);
...

preloadScene.cpp

bool Preload::init(){
...
auto button = ui::Button::create("assets/preload_button.png");
...
auto listener = EventListenerTouchOneByOne::create();
listener->onTouchEnded = CC_CALLBACK_2(Preload::Do, this);
button->addTouchEventListener(listener);
...
}

在编译过程中我得到了这个错误:错误 C2893 无法专门化函数模板“未知类型 std::invoke(_Callable &&,_Types &&...)”

我知道回调或我使用它的方式有问题。请帮忙。

P.S:下一行工作得很好,但我想将这个事件处理代码封装在其他函数中。

*button->addTouchEventListener(
[](Ref* sender, ui::Widget::TouchEventType type) {
switch (type) {
case ui::Widget::TouchEventType::BEGAN: {
CCLOG("touch began");
auto scene = MainMenu::createScene();
Director::getInstance()->popScene();
Director::getInstance()->replaceScene(scene);
}
break;

最佳答案

解决方案:使用 lambda 来调用您的函数。

button->addTouchEventListener([this](Touch*, Event*){ this->Do();}

CC_CALLBACK_2使用 std::bind在引擎盖下。 Button::addTouchEventListener的声明是void Button::addTouchEventListener(const ccWidgetTouchCallback& callback) , 其中ccWidgetTouchCallbackstd::function<void(Ref*,Widget::TouchEventType)>而不是 EventTouchListener .
绑定(bind)虚函数是一种不好的做法,因为派生版本不会被调用。

关于c++ - cocos 2d-x添加触摸事件回调报错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36240712/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com