问题找到了,在你的mahjong.js文件里的start函数里

你使用了cc.director.getScheduler().schedule,我去查看了api,这个计时器一共有六个参数,分别是function, target, interval, repeat, delay, paused,但是你的参数列表少了一个delay,加上就没问题了

但是为啥在模拟器下是正常的,我猜可能是native下的实现和web的实现有差别
问题找到了,在你的mahjong.js文件里的start函数里

你使用了cc.director.getScheduler().schedule,我去查看了api,这个计时器一共有六个参数,分别是function, target, interval, repeat, delay, paused,但是你的参数列表少了一个delay,加上就没问题了

但是为啥在模拟器下是正常的,我猜可能是native下的实现和web的实现有差别
晕死,这错误我还真不知道该怎么查,关键是creator这种问题应该要能报错出来。
多谢你了。
其实查问题很简单的,哪里出错查哪里,就像你的项目,我一行代码都看不懂(我英语从来没有及格过),但是你出问题的地方就是你显示的地方,所以只要检查你显示的逻辑,问题很快就查出来了,如果不好查的,一步一步打log或者下断点查,而且大部分情况下浏览器的控制台会定位错误的具体位置,你这个错误比较特殊,native下是正常的,web端不正常,所以无法找到错误的具体位置
creator里我都只能打Log,不太会用浏览器调试,这个错误就完全不知道怎么回事了。
主题里的头个错误还没解决,我自己再看看,因为我把整个目录拷贝出来再用creator运行就没有错误了,回到老目录还是错误。而老目录是SVN的目录,不好删,我自己再试试先。
嗯,如果不是太底层的东西,我想我也可以帮你看看
问题是你那没法重现,我发给你的就是原样的目录,都没有报错,刚刚把几个没用的目录删了,再开CREATOR重建也是一样报错。只能自己想办法了,看看覆盖回去可以不。
你现在是啥错误呢?
你好这个错误应该是你用 ES6 的方式定义了 class,并且继承自了引擎用 CCClass 定义的类。如果是这个原因,目前报错的行号确实没办法解析出来,这是一个底层问题我们会放到后期再来解决。
如果是其它报错,我们都会显示出源文件中的行号,一般不会出现bundle.project.js的错误信息
刚刚删除了SVN里的目录,用备份的目录覆盖过去,又没有这个错了,呵呵,真是怪得很。
另外,我用了ES6的class定义方式,但是没有继承自ccclass,都是直接用的class,然后自己继承下去。
回家试了还是有问题,而且试出了是\assets\script\lib\wsclient.js这个文件的问题,删了就不会报错,不删就会报错,麻烦你帮我看看好吗?
源码在上楼,谢谢了。
额,我根本没看过es6长啥样,所以也帮不了你,不好意思
你那里也会报这个错误吗?
会,但是es6我一点都不了解
所以无法帮到你
哈罗,经过验证,只要 ES6 有继承,模拟器就会有这个报错!看来 Babel 的实现还是不够优化啊!建议你通过
function base {
}
function sub {
}
cc.js.extend(sub, base);
的方式实现 JS 的原生继承,或者直接使用 CCClass 实现继承。至于报错信息,我们会继续完善!
我现在是服务端和客户端都共享同一个文件,所以不太想改成以上的继承模式,所以问两个问题:
1.出错信息里所说的性能会很差(用这种模式),是不是真的。
2.以后会不会修复这个问题。
因为如果只是暂时的,那我可以无视这个信息,如果无法修复,那我就只能把服务端和客户端的代码都改成没有语法糖的方式了。
要我用cc.js.extend的话不太现实,毕竟服务端没有cc。
能给个确定的信息吗?我这边好改程序.
这是 SpiderMonkey 给的提示,你可以测试下,具体我也不太清楚,V8 和 Chrome 应该没这个问题。
这是 Babel 引起的,要看之后它的版本会不会改进继承的实现方式,不过估计可能性不大
你可以把源码里的那个 extend 方法复制出来单独使用,你也可以用其它任何方法实现继承。JS 的继承写法网上非常多。
谢谢,以前一直是用的网上找的写法,那天看cc和nodejs都支持es6了,想着用标准写法会兼容一些,就都改成了es6的class,改得要死,没想到又要改回去,晕死。
又把这个贴挖出来了,因为昨天才看到arguments.callee性能低下,而且不能用在严格模式下面。而我现在的class实现方式是下面这样的:
//定义最顶级类
function Class() {}
Class.prototype.init = function() {};
Class.extend = function(def) {
var classDef = function() {
if (arguments[0] !== Class) {
this.init.apply(this, arguments);
}
};
var proto = new this(Class);
var superClass = this.prototype;
for (var n in def) {
var item = def[n];
if (item instanceof Function) item.$ = superClass;
proto[n] = item;
}
classDef.prototype = proto;
//赋给这个新的子类同样的静态extend方法
classDef.extend = this.extend;
return classDef;
};
exports.Class = Class;
getName: function() {
//调用BaseClass的getName()方法
return "SubClass(" + this.getId() + ") extends " +
arguments.callee.$.getName.call(this);
},
子类里调用父类的方法必须要用到arguments.callee,这样就没法用这个class去定义类了。
你说可以把extend方法复制出来,我是没法找到这个方法,cc.js.extend,能不能麻烦你指一下在哪里,我不熟悉creator的源码。
或者你告诉我一个简单点的能定义类的方法也可以,不过子类要能调用父类的方法。