loadScene的回调函数在什么时候运行?

加载场景时,可以附加一个参数用来指定场景加载后的回调函数:
cc.director.loadScene(‘MyScene’, onSceneLaunched);
上一行里 onSceneLaunched 就是声明在本脚本中的一个回调函数,在场景加载后可以用来进一步的进行初始化或数据传递的操作。

不知道是不是我理解错了文档的说法。我理解是场景加载完后运行回调函数,但是实际好像是在加载场景前运行的。
cc.log(“scene a”);
cc.director.loadScene(“b”,cc.log(“scene b”));
像这样子,在浏览器单步调试的时候也是看到先输出“scene b”再开始加载场景。

补充一下,我是想完成这个一个功能。
在scene b中有一个节点C,这个节点C的Position是根据scene a中的一些状态决定的,比如按scene a中的按钮1,C的Position为(100,100),按钮2则设置为(200,200)。这个好像不能通过loadScene回调函数完成?如果是的我再考虑用别的方法完成。

还有再问一下,loadScene好像是在下一帧才完成加载?现在单步运行和直接运行得到不一样的结果稍微有些混乱

可以通过常驻节点传递参数

这个回调我也试过,没达到目标,就绕过去了。场景加载成功后,就切换了,那么当前场景就销毁了,回调中如用到当前场景的局部变量怎么办。觉得这个Api没解释清楚。

找到办法了

实现代码,这是一个函数,top和bottom按钮都是调用的这个函数,根据button的name来设置不同的位置

bind里面的第一个参数应该可以随便填,我用self和self.node都能正常运行,这里bind的主要作用是传递参数,bind的具体用法和原理还请百度

可以把当前场景的局部变量当作参数传递给loadScene的回调

可以把当前场景的局部变量当作参数传递给loadScene的回调

下面是demo

tranScene.zip (2.7 MB)

这样是不行的,因为 loadScene 的第二个参数接收的是一个方法(function)
而你传入的是调用 cc.log 后的返回值(undefined),也就是说 cc.log 会先执行,然后返回的值才传给 loadScene。
正确写法是

cc.director.loadScene("b", function () {
    cc.log("scene b");
});

感谢,看了jare大大的回复,是我理解错回调函数使用方法了,就是应该你这么写的

感谢,明白了,之前没理解对用法

额,官方大神的回复和我的回复没有半毛钱关系,因为我也根本没有注意你那么写是错的:joy:现在我知道了,以后我肯定不会那么干

:sweat_smile:都是一个学习过程