4

我正在尝试用switch语句替换我的ifelse if语句。

Ball 类来自一个外部动作脚本文件,女巫有一个变量,我在其中传递球半径(半径 = 30)。

如何将 if 和 else if 语句转换为 switch 语句?

编码:

private var ball:Ball;

private var left:Number = 0;
private var right:Number = stage.stageWidth;
private var top:Number = 0;
private var bottom:Number = stage.stageHeight;    

    if(ball.x >= right + ball.radius)
    {
        ball.x = left - ball.radius;
    }

    else if(ball.x <= left - ball.radius)
    {
        ball.x = right + ball.radius;
    }

    if(ball.y >= bottom + ball.radius)
    {
        ball.y = top - ball.radius;
    }

    else if(ball.y <= top - ball.radius)
    {
        ball.y = bottom + ball.radius;
    } 

谢谢

4

2 回答 2

3

这有一个小技巧 - 你在 case 而不是 switch 处评估不等式:

 switch(true) {
     case ball.x >= right + ball.radius:
         ball.x = left - ball.radius;
         break;
     case ball.x <= left - ball.radius:
         ball.x = right + ball.radius;
         break;
 }

switch(true){
     case (ball.y >= bottom + ball.radius):
         ball.y = top - ball.radius;
         break;
     case (ball.y <= top - ball.radius):
         ball.y = bottom + ball.radius;
         break;
} 
于 2012-12-06T17:02:53.230 回答
1

将 switch 语句视为美化的 IF。
基本上,您正在评估 switch 语句到 case 语句。
Switch 语句以自上而下的顺序进行评估,因此一旦找到匹配项,它将在该情况下的代码运行后脱离 switch。
另外,在您的情况下,您希望将 X 和 Y 分开

switch(true){
  case (ball.x >= right + ball.radius):
    ball.x = left - ball.radius;
    break;
  case (ball.x <= left - ball.radius):
    ball.x = right + ball.radius;
    break;
  default:
    // no match
}

switch(true){
  case (ball.y >= bottom + ball.radius):
    ball.y = top - ball.radius;
    break;
  case (ball.y <= top - ball.radius):
    ball.y = bottom + ball.radius;
    break;
  default:
    // no match
} 
于 2012-12-06T17:06:39.553 回答