想在一个if语句中调用函数,失败了,代码如下,其中ballList为一个已定义的全局数组,数组元素为一个个对象:
if(currentdisY==0) {  
     var devAngle=0;
     speedComputing(devAngle); 
                    }function speedComputing(inputDevAngle)
   {   var angle1;
       var angle2;
       var v1t;
       var v1n;
       var v2t;
       var v2n;

       var u1;
       var u1t;
       var u1n;
       var u2;
       var u2t;
       var u2n;
       var devAngle=inputDevAngle;
  
       angle1=ballList[j].direction-devAngle;
       angle2=ballList[n].direction-devAngle;
       v1n=ballList[j].speed * Math.cos(angle1 * Math.PI / 180);
       v1t=ballList[j].speed * Math.sin(angle1 * Math.PI / 180);
       v2n=ballList[n].speed * Math.cos(angle2 * Math.PI / 180);
       v2t=ballList[n].speed * Math.sin(angle2 * Math.PI / 180);


       u1n=[(1-ballList[j].elaticity2)*v1n+(1+ballList[j].elaticity2)*v2n]/2;
       u1t=v1t;
       u1=Math.sqrt(u1n*u1n+u1t*u1t);
       if(u1n>0){angle1=Math.atan(u1t/u1n)*180/Math.PI;}
       if(u1n<0){angle1=Math.atan(u1t/u1n)*180/Math.PI+180;}
        if(u1n==0)
       {
          if(u1t>0){angle1=90;}
          else if(u1t<0){angle1=-90;}
          else{angle1=0;}
       }
  
       u2n=[(1+ballList[j].elaticity2)*v1n+(1-ballList[j].elaticity2)*v2n]/2;
       u2t=v2t;
       u2=Math.sqrt(u2n*u2n+u2t*u2t);
       if(u2n>0){angle2=Math.atan(u2t/u2n)*180/Math.PI;}
       if(u2n<0){angle2=Math.atan(u2t/u2n)*180/Math.PI+180;}
       if(u2n==0)
       {
          if(u2t>0){angle2=90;}
          else if(u2t<0){angle2=-90;}
          else{angle2=0;}
        }


  
       ballList[j].speed=u1;
       ballList[j].direction=angle1+devAngle;
       ballList[j].speedX=ballList[j].speed*Math.cos(ballList[j].direction* Math.PI / 180);
       ballList[j].speedY=ballList[j].speed*Math.sin(ballList[j].direction* Math.PI / 180);

       ballList[n].speed=u2;
       ballList[n].direction=angle2+devAngle;
       ballList[n].speedX=ballList[n].speed*Math.cos(ballList[n].direction* Math.PI / 180);
       ballList[n].speedY=ballList[n].speed*Math.sin(ballList[n].direction* Math.PI / 180);        if(ballList[j].speedX*ballList[n].speedX>0)
         {ballList[j].nextX+=ballList[j].speedX;}
       if(ballList[j].speedY*ballList[n].speedY>0)
 {ballList[j].nextY+=ballList[j].speedY;}  
}

解决方案 »

  1.   

    如果直接写成这样就可以实现功能了:
    if(currentdisY==0) {   var angle1;
    var angle2;
    var v1t;
    var v1n;
    var v2t;
    var v2n;var u1;
    var u1t;
    var u1n;
    var u2;
    var u2t;
    var u2n;
    var devAngle=0;
     
    angle1=ballList[j].direction-devAngle;
    angle2=ballList[n].direction-devAngle;
    v1n=ballList[j].speed * Math.cos(angle1 * Math.PI / 180);
    v1t=ballList[j].speed * Math.sin(angle1 * Math.PI / 180);
    v2n=ballList[n].speed * Math.cos(angle2 * Math.PI / 180);
    v2t=ballList[n].speed * Math.sin(angle2 * Math.PI / 180);
    u1n=[(1-ballList[j].elaticity2)*v1n+(1+ballList[j].elaticity2)*v2n]/2;
    u1t=v1t;
    u1=Math.sqrt(u1n*u1n+u1t*u1t);
    if(u1n>0){angle1=Math.atan(u1t/u1n)*180/Math.PI;}
    if(u1n<0){angle1=Math.atan(u1t/u1n)*180/Math.PI+180;}
    if(u1n==0)
    {
    if(u1t>0){angle1=90;}
    else if(u1t<0){angle1=-90;}
    else{angle1=0;}
    }
     
    u2n=[(1+ballList[j].elaticity2)*v1n+(1-ballList[j].elaticity2)*v2n]/2;
    u2t=v2t;
    u2=Math.sqrt(u2n*u2n+u2t*u2t);
    if(u2n>0){angle2=Math.atan(u2t/u2n)*180/Math.PI;}
    if(u2n<0){angle2=Math.atan(u2t/u2n)*180/Math.PI+180;}
    if(u2n==0)
    {
    if(u2t>0){angle2=90;}
    else if(u2t<0){angle2=-90;}
    else{angle2=0;}
    }
     
    ballList[j].speed=u1;
    ballList[j].direction=angle1+devAngle;
    ballList[j].speedX=ballList[j].speed*Math.cos(ballList[j].direction* Math.PI / 180);
    ballList[j].speedY=ballList[j].speed*Math.sin(ballList[j].direction* Math.PI / 180);ballList[n].speed=u2;
    ballList[n].direction=angle2+devAngle;
    ballList[n].speedX=ballList[n].speed*Math.cos(ballList[n].direction* Math.PI / 180);
    ballList[n].speedY=ballList[n].speed*Math.sin(ballList[n].direction* Math.PI / 180);if(ballList[j].speedX*ballList[n].speedX>0)
    {ballList[j].nextX+=ballList[j].speedX;}
    if(ballList[j].speedY*ballList[n].speedY>0)
    {ballList[j].nextY+=ballList[j].speedY;}  
    }
      

  2.   

    已经试过将ballList作为参数传入,也不能实现功能,形式如下
    function speedComputing(ballList,inputDevAngle)
      

  3.   

    报错:
    j is not defined
    [在此错误处中断] angle1=ballList[j].direction-devAngle; 
      

  4.   

    恩,现在改用function speedComputing(j,n,inputDevAngle)就可以了
    开始一直试着用function speedComputing(ballList[j],ballList[n],inputDevAngle)
      

  5.   

    function speedComputing(inputDevAngle)
    { var angle1;
    var angle2;
    var v1t;
    var v1n;
    var v2t;
    var v2n;var u1;
    var u1t;
    var u1n;
    var u2;
    var u2t;
    var u2n;
    var devAngle=inputDevAngle;
     
    angle1=ballList[j].direction-devAngle;
    angle2=ballList[n].direction-devAngle;楼主 j 和 n 哪来的 ?