4

ifおよびelse ifステートメントをswitchステートメントに置き換えようとしています。

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

これにはちょっとしたトリックがあります - スイッチではなくケースで不等式の評価を行います:

 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 に答える