我的脚本中发生了一个奇怪的错误。我在画布上有3个球,我可以点击其中任何一个来选择。
如果在选择一个球之后单击另一个球,则会选择新球。每次选择新球时,所选球的阵列都会重置。到目前为止一切都很好。
我想要做的是当我点击画布内的空白区域时重置所选球的数组。
但这仅适用于其中一个球(底部一个,数组中的索引#2)。 但如果我打开警报以查看点击了什么球,则所有球都会记录下来。 由于我弹出警报窗口并且脚本冻结,我可以看到其他球也被短暂选中了。
我让this jsFiddle让你看。当您第一次加载小提琴时,会将注释掉的代码注释掉,取消注释即可看到它。
要查找的代码是:
function selectBall(){
var mX = mouseX;
var mY = mouseY;
for(i=0;i<balls.length;i++){
if(balls[i].select(mX, mY)){
ball.length = 0;
ball.push(balls[i]);
/* Uncomment this to see that click actually happens.
alert('Ball ' + i + ' clicked');
*/
}
/* Uncomment this to get the bug.
else {
ball.length = 0;
}
*/
}
}
为什么当相同的代码行在if语句中重置数组时会出现这个错误,但是当它在其他地方时却没有?
我该如何解决?
答案 0 :(得分:1)
您正在为每个未点击的球重新列出球。这是不正确的。如果没有点击球,你想要做的只是重置球列表。这可以通过以下方法解决。
function selectBall(){
var mX = mouseX;
var mY = mouseY;
var isClick = false;
for(i=0;i<balls.length;i++){
if(balls[i].select(mX, mY)){
isClick = true;
ball.length = 0;
ball.push(balls[i]);
break;
}
}
if (!isClick)
{
ball.length = 0;
}
}
你可以看到我添加了一个简单的标志来确定是否选择了任何球。如果没有,那么我重置阵列。否则,我不会重置阵列。