auto listener = EventListenerCustom::create("test",](EventCustom* evt){
log("say hi");
});
auto dispatcher = Director::getInstance()->getEventDispatcher();
dispatcher->addEventListenerWithSceneGraphPriority(listener, this);
runAction(Sequence::create(DelayTime::create(2),CallFunc::create(]{
auto scene = Scene::create();
scene->runAction(Sequence::create(DelayTime::create(2),CallFunc::create(]{
auto dispatcher = Director::getInstance()->getEventDispatcher();
log("dispatcher a msg");
dispatcher->dispatchCustomEvent("test");
}), NULL));
Director::getInstance()->pushScene(scene);
}), NULL));
```
如上,在一个场景的时候,触发有效,但是接收绑定的node和dispatch的时候不在一个场景的话,就无效,请问就是这样设定的吗
不同scene的信号联动,用自定义事件是不错的选择呀
对象node是用户控制的。
派发器dispatcher如果用户不设置的话,就应该是director里面那个,是全局唯一的。
所以,事件如何调度,得看你listener回调指向的是哪个scene的对象了吧,看看eventdispathcer的代码吧
dispatcher->addEventListenerWithSceneGraphPriority(listener, this);
切换scene的时候你的node(上一行代码里的this)生命周期已经结束了, 所以事件监听也被移除了