Cc.LoaderScene.preload的问题

因为Map里面有很多初始化要根据资源的size来制定位置,为了提前把资源读好,我在HelloScene中用preload的方法进入了Map的scene,代码如下
var HelloLayer = cc.Layer.extend({

onSingleplayer:function (pSender) {
cc.LoaderScene.preload(map_resources, function (){
var scene = new cc.Scene();
scene.addChild(new Map(), 0, 1);
cc.director.pushScene(new cc.TransitionFade(1, scene));
}, this);
}
});

然后在Map里要回退到HelloScene
var Map = cc.Layer.extend({

back:function(pSender){
cc.director.popScene();
}
});

回退HelloScene的时候发现直接就跳进HelloLayer里面的var scene = new cc.Scene();这句话上,然后又自动跳回到Map里面去了,无法回到HelloScene里面去。请问有人知道这是什么问题么?如何解决?

自己顶一下:6:

当使用cc.LoaderScene的时候其实引擎已经为你创建加载了一个场景loading scene,当loading scene加载完毕之后开始之星下面的跳转场景,此时相当于是从loading scene 跳转到Map场景的,然后你popScene()的时候返回的是loading scene,这样就又跳转到了Map中,所以才会出现这种情况

看注释 /**

  • cc.LoaderScene.preload can present a loaderScene with download progress.

  • when all the resource are downloaded it will invoke call function

  • @param resources
  • @param cb
  • @returns {cc.LoaderScene|*}
  • @example
  • //Example
  • cc.LoaderScene.preload(g_resources, function () {
    cc.director.runScene(new HelloWorldScene());
    }, this);
    */
    再看不懂跟踪源代码一直到cc.AsyncPool

所以我如果用了preload我就无法回到之前的scene,一定要重新create一个以前的scene是吗?

理论上讲是这样的,或者如果这是你第一个push的场景就可以用popToRootScene(),如果不是,那可以用popToSceneStackLevel(level),你可以查查他们的相关说明

你可以写逻辑代码 让第2遍回到以后不调用preload…

有没有可能是 LZ 的写的跳转逻辑有问题呢? onSingleplayer 是不是在 HelloLayer 初始化的时候就调用了?