反向传值:
有两个场景:A和B,A为主场景界面,跳转到B场景。A场景消失之前,B场景需要传送一些数据到A场景,A场景根据数据完成相关的操作。这种叫做反向传值,反向传值有两种方式:
方式一:
A场景设置一个成员函数或者定义一个闭包,B场景定义一个函数对象,即std::function<返回值类型(参数)> 。在B场景中(一般为初始化函数中)将函数对象赋值为A场景定义的成员函数或者闭包,传入参数使A场景中的函数实现,从而实现A场景得到数据完成相关操作。
方式二:
在A场景中定义一个EventListenerCustom,如下所示:
auto el = EventListenerCustom::create("PROGESS",[=](EventCustom * obj){
char * pro = (char *)obj->getUserData();//获取B场景传回来的数据
loadbar->setPercent( std::atoi(pro));//完成A场景所需要的操作
});
Director::getInstance()->getEventDispatcher()->addEventListenerWithFixedPriority(el,1);
而B场景只需要根据eventName简单调用即可,如上代码,A场景eventName为PROGESS,只需以下一行代码:
有两个场景:A和B,A为主场景界面,跳转到B场景。A场景消失之前,B场景需要传送一些数据到A场景,A场景根据数据完成相关的操作。这种叫做反向传值,反向传值有两种方式:
方式一:
A场景设置一个成员函数或者定义一个闭包,B场景定义一个函数对象,即std::function<返回值类型(参数)> 。在B场景中(一般为初始化函数中)将函数对象赋值为A场景定义的成员函数或者闭包,传入参数使A场景中的函数实现,从而实现A场景得到数据完成相关操作。
方式二:
在A场景中定义一个EventListenerCustom,如下所示:
auto el = EventListenerCustom::create("PROGESS",[=](EventCustom * obj){
char * pro = (char *)obj->getUserData();//获取B场景传回来的数据
loadbar->setPercent( std::atoi(pro));//完成A场景所需要的操作
});
Director::getInstance()->getEventDispatcher()->addEventListenerWithFixedPriority(el,1);
而B场景只需要根据eventName简单调用即可,如上代码,A场景eventName为PROGESS,只需以下一行代码:
Director::getInstance()->getEventDispatcher()->dispatchCustomEvent("PROGESS",(void *)((i+1)/500));