2017-02-13 3 views
0

私は何が起こりたいですか? 'Return'を押すことによって、私はアクションを実行するif文を1つだけ期待します。最初のプレイスルーはうまくいきますが、Startgame()関数が再び呼び出されると、 'Return'キーが最初に押されると、両方のifステートメントがアクティブになります。なぜ私は不明です。Keycode.return in update()

using UnityEngine; 


    using System.Collections; 

    public class NumberWizard : MonoBehaviour { 

     int max; 
     int min; 
     int guess; 

     bool playerSelectedRange = false; 

     void StartGame() 
     { 
      max = 1000; 
      min = 1; 
      guess = 500; 

      playerSelectedRange = false; 

      print ("======================="); 
      print("Welcome to number wizard"); 
      print ("The lowest number you can pick is 1. Would you like the maximum number to be 1000?"); 
      print ("Up = Higher, Down = Lower, Return = Happy with this number"); 
     } 

     // Use this for initialization 
     void Start() { 
      StartGame(); 
     } 

     // Update is called once per frame 
     void Update() { 

      if (playerSelectedRange == true) { 
       if (Input.GetKeyDown(KeyCode.UpArrow)){ 
        min = guess; 
        NextGuess(); 
       } 
       else if (Input.GetKeyDown(KeyCode.DownArrow)){ 
        max = guess; 
        NextGuess(); 
       } 
       else if (Input.GetKeyDown(KeyCode.Return)){ 
        print("I won"); 
        StartGame(); 
       } 
      } 

      if (playerSelectedRange == false) 
      { 
       if (Input.GetKeyDown(KeyCode.UpArrow)) 
       { 
        max = max + 100; 
        MaxRange(); 
       } 
       else if (Input.GetKeyDown(KeyCode.DownArrow)){ 
        max = max - 100; 
        MaxRange(); 
       } 
       else if(Input.GetKeyDown(KeyCode.Return)){ 
        print ("Lets play!!!"); 
        print ("Choose a number between 1 and " + max); 
        max = max + 1; 
        NextGuess(); 
        playerSelectedRange = true; 
       } 
      } 


     } 

     void NextGuess() 
     { 
      guess = (max+min)/2; 
      print ("Is your number higher or lower than " + guess + "?"); 
      print ("Up arrow key for higher. Down arrow key for lower. Return key for Correct"); 
     } 



     void MaxRange() 
     { 
      print ("Do you want it to be " + max + "?"); 
      print ("Up = higher, down = lower, return = Just right"); 
     } 

    } 

答えて

3
 if (playerSelectedRange == true) { 
      if (Input.GetKeyDown(KeyCode.UpArrow)){ 
       min = guess; 
       NextGuess(); 
      } 
      else if (Input.GetKeyDown(KeyCode.DownArrow)){ 
       max = guess; 
       NextGuess(); 
      } 
      else if (Input.GetKeyDown(KeyCode.Return)){ 
       print("I won"); 
       StartGame(); 
      } 
     }else 
     { 
      if (Input.GetKeyDown(KeyCode.UpArrow)) 
      { 
       max = max + 100; 
       MaxRange(); 
      } 
      else if (Input.GetKeyDown(KeyCode.DownArrow)){ 
       max = max - 100; 
       MaxRange(); 
      } 
      else if(Input.GetKeyDown(KeyCode.Return)){ 
       print ("Lets play!!!"); 
       print ("Choose a number between 1 and " + max); 
       max = max + 1; 
       NextGuess(); 
       playerSelectedRange = true; 
      } 
     } 

トリックを行う必要があるように思えます。あなたの問題は、if(playerSelectedRange)...と言って、を呼び出し、playerSelectedRangeをfalseに設定し、次に他のif文を実行することです。これは、一度しか実行されないことを保証します。

+0

私には、キー押しの時にはまだ当てはまります。 – Pete

+0

右ですが、コードは行に基づいて実行されます。したがって、コードを実行するとコードが実行され、値が変更され、値が変更されたときに別のif文が実行されます。 – jdmdevdotnet

+0

私の解決策は、押された後の2番目のif文をチェックしません。私はこれがあなたが必要とするものだと思います。 – jdmdevdotnet