js脚本写到159行,就报错了···
请问大神这问题怎么破
能否把你报错的 js 代码贴上来看看?
Creator版本是1.2.1-rc.1,在Game.js脚本里面的,小白我是先想做手游,然后才来边做边学的风格,js语言也没系统学过,基本上是哪块需要用就学哪块,所以代码在大神看来可能会非常拙劣。
就是下面这些代码,一共158行,大体来说就是让四个预制资源出现在屏幕之外的特定范围,然后运动入屏幕中,当离开预制资源Player超过一定距离时就destroy,然后再在特定位置重新生成一个。
为了贴上来,一些关键字被我换掉了比如换成了W1、W2、W3、C1之类的,会显示Too many errors:(99%scanned),然后运行时控制台会报错:Simulator: 517:SyntaxError: property name C1Position appears more than once in object literal,但只要把其中任何无关紧要的一行去掉,编辑脚本的时候都不会报错(虽然运行时控制台还是会报错)。
代码本身应该是没有问题的,因为我只有3个预制资源W1、W2、Player的时候运行效果是跟我设想的情况一样的,但预制资源增加到5个的时候就这样了。。。我一共要加22个预制资源的啊····
为了方便描述,我把代码最后面一大段C1destroy的删掉了。就是说一定要删到158行脚本才不会报错,超过一行都有问题。
cc.Class({
extends: cc.Component,
properties: {
W1Prefab : {
default : null,
type : cc.Prefab,
},
W2Prefab : {
default : null,
type : cc.Prefab,
},
W3Prefab : {
default : null,
type : cc.Prefab,
},
C1Prefab : {
default : null,
type : cc.Prefab,
},
PlayerPrefab : {
default : null,
type : cc.Prefab,
},
},
onLoad: function () {
var W1Num = 0;
var W2Num = 0;
var W3Num = 0;
var C1Num = 0;
this.W1Num = W1Num;
this.W2Num = W2Num;
this.W3Num = W3Num;
this.C1Num = C1Num;
var Player = cc.instantiate(this.PlayerPrefab);
this.node.addChild(Player);
Player.setPosition(0,0);
this.Player = Player;
},
SpawnW1: function () {
var W1 = cc.instantiate(this.W1Prefab);
this.node.addChild(W1);
W1.setPosition(this.W1Position());
this.W1 = W1;
},
SpawnW2: function () {
var W2 = cc.instantiate(this.W2Prefab);
this.node.addChild(W2);
W2.setPosition(this.W2Position());
this.W2 = W2;
},
SpawnW3: function () {
var W3 = cc.instantiate(this.W3Prefab);
this.node.addChild(W3);
W3.setPosition(this.W3Position());
this.W3 = W3;
},
SpawnC1: function () {
var C1 = cc.instantiate(this.C1Prefab);
this.node.addChild(C1);
C1.setPosition(this.C1Position());
this.C1 = C1;
},
W1Position: function () {
var W1X;
var W1Y;
var W1Xrandom = cc.randomMinus1To1();
if (W1Xrandom > 0) {
W1X = this.Player.getPositionX() + 2000 * W1Xrandom;
}
else {
W1X = this.Player.getPositionX() + 2000 * W1Xrandom;
}
W1Y = this.Player.getPositionY() - 1200 - 500 * cc.random0To1();
return cc.p(W1X, W1Y);
},
W2Position: function () {
var W2X;
var W2Y;
var W2Xrandom = cc.randomMinus1To1();
if (W2Xrandom > 0) {
W2X = this.Player.getPositionX() + 2000 * W2Xrandom;
}
else {
W2X = this.Player.getPositionX() + 2000 * W2Xrandom;
}
W2Y = this.Player.getPositionY() - 1200 - 500 * cc.random0To1();
return cc.p(W2X, W2Y);
},
W3Position: function () {
var W3X;
var W3Y;
var W3Xrandom = cc.randomMinus1To1();
if (W3Xrandom > 0) {
W3X = this.Player.getPositionX() + 2000 * W3Xrandom;
}
else {
W3X = this.Player.getPositionX() + 2000 * W3Xrandom;
}
W3Y = this.Player.getPositionY() - 1200 - 500 * cc.random0To1();
return cc.p(W3X, W3Y);
},
C1Position: function () {
var C1X;
var C1Y;
var C1Xrandom = cc.randomMinus1To1();
if (C1Xrandom > 0) {
C1X = this.Player.getPositionX() + 2000 * C1Xrandom;
}
else {
C1X = this.Player.getPositionX() + 2000 * C1Xrandom;
}
C1Y = this.Player.getPositionY() - 1200 - 500 * cc.random0To1();
return cc.p(C1X, C1Y);
},
update: function (dt) {
if (this.W1Num < 1) {
this.SpawnW1();
this.W1Num += 1;
}
if (this.W2Num < 1) {
this.SpawnW2();
this.W2Num += 1;
}
if (this.W3Num < 1) {
this.SpawnW3();
this.W3Num += 1;
}
if (this.C1Num < 1) {
this.SpawnC1();
this.C1Num += 1;
}
var GetW1X = this.W1.getPositionX();
var GetW1Y = this.w1.getPositionY();
var GetPlayerX = this.Player.getPositionX();
var GetPlayerY = this.Player.getPositionY();
if (GetW1X - GetPlayerX > 3000 || GetPlayerX - GetW1X > 3000 || GetW1Y - GetPlayerY > 3000 || GetPlayerY - GetW1Y > 3000) {
this.W1.destroy();
this.W1Num -= 1;
}
var GetW2X = this.W2.getPositionX();
var GetW2Y = this.W2.getPositionY();
if (GetW2X - GetPlayerX > 3000 || GetPlayerX - GetW2X > 3000 || GetW2Y - GetPlayerY > 3000 || GetPlayerY - GetW2Y > 3000) {
this.W2.destroy();
this.W2Num -= 1;
}
var GetW3X = this.W3.getPositionX();
var GetW3Y = this.W3.getPositionY();
if (GetW3X - GetPlayerX > 3000 || GetPlayerX - GetW3X > 3000 || GetW3Y - GetPlayerY > 3000 || GetPlayerY - GetW3Y > 3000) {
this.W3.destroy();
this.W3Num -= 1;
}
},
});
谢谢,小白我仔仔细细自查了一遍,问题解决了。
是这样的,我发现Game.js报错的时候,我已经把22个预制资源都写进代码了,一共七八百行,为了不浪费原来写那些代码的时间,我把那些代码复制到了一个叫做Game1.js的文件里,然后从Game.js中找问题。
虽然Game.js的问题改过来了,但我怕还有其他什么问题,所以并没有删掉Game1.js,结果运行时每次都报错,我就以为Game.js里还有错,而其实都是那个Game1.js的问题。。。
会出现这个错误的原因是因为我以为只要不把Game1.js加到Canvas之类的节点里,只是作为一个文件备份放在那边,模拟器就不会运行它,结果其实模拟器每次都运行了。
可能控制台里的出错信息加个出错的文件名和出错在第几行会比较好呢
感谢反馈,不过要准确知道哪一个文件的哪一行报错貌似有点难度。