我这里给出一个, 自己写的一个方案. 个人觉得非常好. 下面方法比我简化了一个功能贴出的. 其实下面的这种实现方法还有另外一些非常好用的功能.
一下方式对于 jsb 也是正常运行的.
var dg = dg || {};
/**
* 包装layer 到scene中
* @param layer
* @param args
* @returns {cc.Scene}
*/
dg.createScene = function(layer, args){
return dg._scene.initArgs.apply(new dg._scene(), arguments);
};
dg._scene = cc.Scene.extend({
initArgs : function(layer, args){
var that = this, _ctor = null;
args = Array.prototype.slice.call(arguments, 1);
if(args.length > 0){
_ctor = layer.prototype.ctor;
layer.prototype.ctor = null;
}
var ly = new layer();
if(_ctor != null){
layer.prototype.ctor = _ctor;
layer.prototype.ctor.apply(ly, args);
}
that.addChild(ly);
return that;
}
});
```
//使用示例, 对于多个参数也是一样的
var TestLayer1 = cc.Layer.extend({
ctor : function(){
this._super();
var score = 100;
cc.director.runScene(dg.createScene(TestLayer2, score));
}
});
var TestLayer2 = cc.Layer.extend({
ctor : function(score){
this._super();
cc.log("上一个场景所得分: " + score);
var score2 = 200;
cc.director.runScene(dg.createScene(TestLayer3, score, score2));
}
});
var TestLayer3 = cc.Layer.extend({
ctor : function(score1, score2){
this._super();
cc.log("上一个场景所得分 score1 : " + score1 + " score2 : " + score2);
cc.director.runScene(dg.createScene(TestLayer4));
}
});
var TestLayer4 = cc.Layer.extend({
ctor : function(){
this._super();
cc.log("这是一个无参数layer");
}
});
```