给Creator的官方大大们提供一个大BUG:关于Creator中CCClass.js中的一段代码:
function CCClass(options) {
options = options || {};
var name = options.name;
var base = options.extends;
var mixins = options.mixins;
var cls = define(name, base, mixins, options);
name || (name = cc.js.getClassName(cls));
cls._sealed = true;
base && (base._sealed = false);
var properties = options.properties;
问题代码:上面加粗的代码。
问题描述:当项目使用TS来实现类的继承时,这里的_sealed值一直为true,导致在调用GetComponet时,如果传入的参数是类的基类名称,那么就无法get到子类的组件对象。 当使用JS原生来实现时,是OK的。
而我的代码中对整个UI这块做了封装,有太多需求需要通过传入基类的名称去GET组件对象,现在就卡在这里。
-
我先在浏览器平台解决这个问题:不论我怎么改CCClass.js中的这处代码(强制改为false, 然后把第二句去掉),都不管用,然后找到了/Applications/CocosCreator.app/Contents/Resources/engine/bin/cocos2d-js-for-preview.js,改这里面的对应代码,然后浏览器平台就能在调试状态下执行正常,但在发布出来的文件中,还是错的,代码是s._sealed=!0; base?(s._sealed=!1); 最后解决办法还是直接改发布后的这个文件中的这块代码。
-
在模拟器上,无论我改哪里都不OK,始终没有正确执行。
也许是因为我对cocos构建发布的流程不太熟悉,没找到准确的位置,但是这个编辑器也确实是有问题的:无论我在设置里面敲定使用内置引擎还是使用自定义的引擎,构建时都会使用我没改过的代码,这就迷茫了,不知道到底它用的代码在哪。希望官方能抽点空闲来帮大家梳理一下关于构建这块的具体流程,使用的引擎到底 有什么潜规则,不然这样做起来很打击开发者信心。官方不解决,我们自己也没办法弄才真是让人失望!