单击画布中的对象时出现奇怪的错误?

时间:2012-03-30 19:18:31

标签: javascript html5 canvas

我的脚本中发生了一个奇怪的错误。我在画布上有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语句中重置数组时会出现这个错误,但是当它在其他地方时却没有?

我该如何解决?

1 个答案:

答案 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;
  }
}

你可以看到我添加了一个简单的标志来确定是否选择了任何球。如果没有,那么我重置阵列。否则,我不会重置阵列。