gpt4 book ai didi

cocos2d-x - 如何在 Cocos2d-x 3.x 中创建没有 lambda 函数的自定义事件监听器?

转载 作者:行者123 更新时间:2023-12-04 00:35:54 25 4
gpt4 key购买 nike

Cocos2d-x 3.x 中新的 Event Dispatcher 有几个测试示例,显示 lambda 用于同一类中的回调。我有一个基类需要注册一个事件,然后让一个重写的子类方法响应该事件。我将如何做到这一点?

在我的基类中:

EventListenerCustom* listener = EventListenerCustom::create("my_event", myVirtualEventMethod);

根据 Kazuki 的回答更新:

class BaseScene : public cocos2d::Layer
{
public:
virtual void myVirtualEventMethod();
};

我的方法:

EventListenerCustom* listener = EventListenerCustom::create("my_event", CC_CALLBACK_1(BaseScene::myVirtualEventMethod, this));

查看下面评论中的错误。

最佳答案

EventListenerCustom::create() 接受 std::function。

https://github.com/cocos2d/cocos2d-x/blob/v3/cocos/base/CCEventListenerCustom.h#L59

static EventListenerCustom* create(const std::string& eventName, const std::function<void(EventCustom*)>& callback)

所以你可以像这样用 std::bind 指定一个成员函数。

EventListenerCustom* listener = EventListenerCustom::create("my_event",
std::bind(&YourSubclass::myVirtualEventMethod, this, std::placeholders::_1));

在cocos2d-x中有一个宏。

EventListenerCustom* listener = EventListenerCustom::create("my_event",
CC_CALLBACK_1(YourSubclass::myVirtualEventMethod, this));

已编辑

No viable conversion from '__bind<void (BaseScene::*)(), BaseScene ,
std::__1::placeholders::__ph<1>&>' to 'const std::function<void(Eventcustom)>'

因为myVirtualEventMethod的类型和void(EventCustom*)不一样。应该是这样

virtual void myVirtualEventMethod(EventCustom*);

或者

EventListenerCustom* listener = EventListenerCustom::create("my_event",
CC_CALLBACK_0(YourSubclass::myVirtualEventMethod, this));

关于cocos2d-x - 如何在 Cocos2d-x 3.x 中创建没有 lambda 函数的自定义事件监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24641619/

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