2016-05-29 8 views
0

私はゲームを作ろうとしていますが、次のコードでは、for-loopを使ってswitch文を宣言した関数を定義しました。今はconsole.log()ですべてうまくいきましたが、switch-statementは動作しません。compXとcompYの両方が例えば2より大きい場合でも、switchのcase-statementでコードを実行しません。私はconsole.log()でそれをテストしました。ここでは、'rux 'と'ruy'のケースステートメントで尋ねましたが、コンソールに何も表示されませんでした。だから誰かが私が間違ってやっているアイディアを持っていますか?誰かがそれがどのように機能するかの例を持っていますか? すべての小さな答えに感謝します!javascript - 2つの変数を持つ関数のスイッチ

function updatePosition() { 
    for (var pc = policeNum; pc > 0; pc--) { 
     policeRef.child(pc).once('value', function (snapshot) { 
      var oldData = snapshot.val(); 
      //KI: 
      var compX = newX - oldData.X; 
      var compY = newY - oldData.Y; 
      console.log('We found X:', compX); 
      console.log('We found Y:', compY); 
      switch (compX, compY) { 
      case compX < -2 && compY < -2: //links und oben 
       var lox = oldData.X - pixelWidth; 
       var loy = oldData.Y - pixelHeight; 
       policeRef.child(pc).update({ 
        X: lox, 
        Y: loy 
       }); 
       break; 
      case compX > 2 && compY < -2: //rechts und oben 
       var rox = oldData.X + pixelWidth; 
       var roy = oldData.Y - pixelHeight; 
       policeRef.child(pc).update({ 
        X: rox, 
        Y: roy 
       }); 
       break; 
      case compX < -2 && compY > 2: //links und unten 
       var lux = oldData.X - pixelWidth; 
       var luy = oldData.Y + pixelHeight; 
       policeRef.child(pc).update({ 
        X: lux, 
        Y: luy 
       }); 
       break; 
      case compX > 2 && compY > 2: //rechts und unten 
       var rux = oldData.X + pixelWidth; 
       var ruy = oldData.Y + pixelHeight; 
       console.log('We found rux:', rux); 
       console.log('We found ruy:', ruy); 
       policeRef.child(pc).update({ 
        X: rux, 
        Y: ruy 
       }); 
       break; 
      case compX > -2 && compX < 2 && compY > 2: //unten 
       var uy = oldData.Y + pixelHeight; 
       console.log('We found uy:', uy); 
       policeRef.child(pc).update({ 
        Y: uy 
       }); 
       break; 
      case compX > -2 && compX < 2 && compY < -2: //oben 
       var oy = oldData.Y - pixelHeight; 
       policeRef.child(pc).update({ 
        Y: oy 
       }); 
       break; 
      case compY > -2 && compY < 2 && compX > 2: //rechts 
       var rx = oldData.X + pixelWidth; 
       policeRef.child(pc).update({ 
        X: rx 
       }); 
       break; 
      case compY > -2 && compY < 2 && compX < 2: //links 
       var lx = oldData.X - pixelWidth; 
       policeRef.child(pc).update({ 
        X: lx 
       }); 
       break; 

      } 
      context.clearRect(oldData.Y, oldData.X, pixelHeight, pixelWidth) 
     }); 
     updateDraw(); 
    } 
} 
+0

'switch'文は** 1つの**表現で動作し、ありません二。 2つの式をJavaScriptでカンマで区切るのは誤りではありませんが、重要な表現は第2の表現だけです。 'switch'と' case'コードを一連の 'if'と' else if'文で置き換えなければなりません。 – Pointy

+0

スイッチを 'switch(true)'に置き換え、大文字と小文字が括弧で囲まれていることを確認します。 'case(compX <-2 && compY <-2):'であり、意図した通りに動作するはずです。 – DBS

答えて

2

あなたはそれがif-else文であるかのようにswitchを使用しようとしています。スイッチ内で複数の変数を使用することはできず、==以外の比較も実行できません。

switchの構文は次のとおりです。

switch(expression) { 
    case expected_value: // i.e, expression == expected_value 
    ... 
    break; 

    case another_expected_value: 
    ... 
    break; 
} 

あなたは例えば、代わりにif-elseを使用するようにコードを変更する必要があります。

if (compX < -2 && compY < -2) { 
    ... 
} else if (compX > 2 && compY <-2) { 
    ... 
} else { 
    ... 
+2

実際には 'switch(true){}'を使って 'else'のように' switch'動作をすることができます。各ステートメントは単に「真」と比較されるためです。 – DBS

関連する問題