creator 版本: 1.8.0
先说一下这个问题的起源,是因为我有很多 cocos2d-js 的模块,想要做到尽量少的改动的前提下,适配到 CCC 中使用。
假设我有一段简单的 cocos2d-js 的代码如下:
JiaoBen.js
var NAMESPACE_TEST = NAMESPACE_TEST || {};
NAMESPACE_TEST.AAA = cc.Node.extend( {
ctor:function () {
cc.log("AAA");
}
});
NAMESPACE_TEST.BBB = NAMESPACE_TEST.AAA.extend( {
ctor:function () {
cc.log("BBB");
}
});
这在 cocos2d-js 中是很常见的写法。
然后,现在我尝试将这个脚本在 CCC 中,以插件脚本的形式(允许native),导入项目。
当然这里做了个修改,把 cc.Node
改成了 _ccsg.Node
然后在一个 脚本中测试一下 demo.js :
cc.Class({
extends: cc.Component,
properties: {
},
onLoad: function () {
cc.log(NAMESPACE_TEST);
cc.log(NAMESPACE_TEST.AAA);
cc.log(NAMESPACE_TEST.BBB);
}
});
在 浏览器环境下,代码可以正常运行,并打印出结果。
但是在 native 环境下(mac),就会报错:
ERROR: TypeError: NAMESPACE_TEST.AAA.extend is not a function.
再尝试另一种方法,JiaoBen.js 稍作修改,作为普通脚本形式,导入项目:
JiaoBen.js
var NAMESPACE_TEST = NAMESPACE_TEST || {};
NAMESPACE_TEST.AAA = cc.Node.extend( {
ctor:function () {
cc.log("AAA");
}
});
NAMESPACE_TEST.BBB = NAMESPACE_TEST.AAA.extend( {
ctor:function () {
cc.log("BBB");
}
});
module.exports = NAMESPACE_TEST;
demo.js
var NAMESPACE_TEST = require('AAA');
cc.Class({
extends: cc.Component,
properties: {
},
onLoad: function () {
cc.log(NAMESPACE_TEST);
cc.log(NAMESPACE_TEST.AAA);
cc.log(NAMESPACE_TEST.BBB);
}
});
同样,浏览器环境可以正常运行,打印出结果,
但是在 native 环境下(mac),还是一样报错:
ERROR: TypeError: NAMESPACE_TEST.AAA.extend is not a function.
所以想请问一下,这个有什么办法解决呢?