2015-10-02 24 views
0

這是我的代碼來處理雙跳。但有時它不起作用。雙跳不按預期工作

第一次我觸摸屏幕我的角色跳轉(變量doublejump = true)。當我第二次觸摸屏幕時,我的角色跳得更高(雙跳=假)(雙跳起作用)。

但有時當我觸摸屏幕首次(無需觸摸屏幕第二次)doublejump變量= FALSE(雙跳不工作,我預期)

幫我解決這個問題

我的代碼:

 void FixedUpdate() 
     { 
      isGrounded = GroundedCheck(); 
      if (gm.gameState == GameManager.GameState.playing) { 

       foreach (GameObject g in gm.deadObjects) { 
        if (g.name == "P13") { 
         g.GetComponent<Mygroup>().targetName = "P12"; 
        } else if (g.name == "P12") { 
         g.GetComponent<Mygroup>().targetName = "P11"; 
        } else if (g.name == "P11") { 
         g.GetComponent<Mygroup>().targetName = "P10"; 
        } else if (g.name == "P10") { 
         g.GetComponent<Mygroup>().targetName = "P9"; 
        } else if (g.name == "P9") { 
         g.GetComponent<Mygroup>().targetName = "P8"; 
        } else if (g.name == "P8") { 
         g.GetComponent<Mygroup>().targetName = "P7"; 
        } else if (g.name == "P7") { 
         g.GetComponent<Mygroup>().targetName = "P6"; 
        } else if (g.name == "P6") { 
         g.GetComponent<Mygroup>().targetName = "P5"; 
        } else if (g.name == "P5") { 
         g.GetComponent<Mygroup>().targetName = "P4"; 
        } else if (g.name == "P4") { 
         g.GetComponent<Mygroup>().targetName = "P3"; 
        } else if (g.name == "P3") { 
         g.GetComponent<Mygroup>().targetName = "P2"; 
        } else if (g.name == "P2") { 
         g.GetComponent<Mygroup>().targetName = "P1"; 
        } else if (g.name == "P1") { 
         g.GetComponent<Mygroup>().targetName = "P0"; 
        } else if (g.name == "P0") { 
         g.GetComponent<Mygroup>().targetName = null; 
        } 
       } 
       if (this.gameObject.name == "P0") { 
        targetName = ""; 
       } else if (this.gameObject.name == "P1") 
        targetName = "P0"; 
       else if (this.gameObject.name == "P2") 
        targetName = "P1"; 
       else if (this.gameObject.name == "P3") 
        targetName = "P2"; 
       else if (this.gameObject.name == "P4") 
        targetName = "P3"; 
       else if (this.gameObject.name == "P5") 
        targetName = "P4"; 
       else if (this.gameObject.name == "P6") 
        targetName = "P5"; 
       else if (this.gameObject.name == "P7") 
        targetName = "P6"; 
       else if (this.gameObject.name == "P8") 
        targetName = "P7"; 
       else if (this.gameObject.name == "P9") 
        targetName = "P8"; 
       else if (this.gameObject.name == "P10") 
        targetName = "P9"; 
       else if (this.gameObject.name == "P11") 
        targetName = "P10"; 
       else if (this.gameObject.name == "P12") 
        targetName = "P11"; 

       target = GameObject.Find (targetName); 

       if (isGrounded) { 
        jumping = false; 
        doubleJump = false; 
        jumpAnim = false; 

    if (this.gameObject.name == "P0" && isGrounded && !doubleJump && !jumping) { 
       if (Input.GetMouseButtonDown (0) && this.gameObject.name == "P0") { 
         jumping = true; 
         rid.velocity = new Vector3 (0, 50f * jump, 0); 
         doubleJump = true; 
        } 
       } 
    if (this.gameObject.name == "P0" && !isGrounded && doubleJump && jumping) { 
     if (Input.GetMouseButtonDown (0) && this.gameObject.name == "P0") { 
         rid.velocity = new Vector3 (0, 60f * jump, 0); 
         doubleJump = false; 
        } 
       } 

if (target != null && this.gameObject.name != "P0" && isGrounded && target.GetComponent<Mygroup>().doubleJump && !target.GetComponent<Mygroup>().isGrounded) { 
        StartCoroutine (Jump()); 
       } 

    if (target != null && this.gameObject.name != "P0" && !isGrounded && doubleJump && !target.GetComponent<Mygroup>().isGrounded && !target.GetComponent<Mygroup>().doubleJump) { 
        StartCoroutine (JumpDouble()); 
       } 
     } 
     IEnumerator Jump() 
     { 
      yield return new WaitForSeconds (time); 

      if (gameObject.name == "P1") 
       rid.velocity = new Vector3 (0, 49.6f * jump, 0); 
      if (gameObject.name == "P2") 
       rid.velocity = new Vector3 (0, 49.4f * jump, 0); 
      if (gameObject.name == "P3") 
       rid.velocity = new Vector3 (0, 49.2f * jump, 0); 
      if (gameObject.name == "P4") 
       rid.velocity = new Vector3 (0, 49f * jump, 0); 
      if (gameObject.name == "P5") 
       rid.velocity = new Vector3 (0, 48.8f * jump, 0); 
      if (gameObject.name == "P6") 
       rid.velocity = new Vector3 (0, 48.6f * jump, 0); 
      if (gameObject.name == "P7") 
       rid.velocity = new Vector3 (0, 48.4f * jump, 0); 
      if (gameObject.name == "P8") 
       rid.velocity = new Vector3 (0, 48.2f * jump, 0); 
      if (gameObject.name == "P9") 
       rid.velocity = new Vector3 (0, 48f * jump, 0); 
      if (gameObject.name == "P10") 
       rid.velocity = new Vector3 (0, 47.8f * jump, 0); 
      if (gameObject.name == "P11") 
       rid.velocity = new Vector3 (0, 47.6f * jump, 0); 
      if (gameObject.name == "P12") 
       rid.velocity = new Vector3 (0, 47.4f * jump, 0); 

      jumping = true; 
      doubleJump = true; 

     } 
     IEnumerator JumpDouble() 
     { 
      yield return new WaitForSeconds (time); 
      if (doubleJump) { 

       if (gameObject.name == "P1") 
        rid.velocity = new Vector3 (0, 59.8f * jump, 0); 
       if (gameObject.name == "P2") 
        rid.velocity = new Vector3 (0, 59.6f * jump, 0); 
       if (gameObject.name == "P3") 
        rid.velocity = new Vector3 (0, 59.4f * jump, 0); 
       if (gameObject.name == "P4") 
        rid.velocity = new Vector3 (0, 59.2f * jump, 0); 
       if (gameObject.name == "P5") 
        rid.velocity = new Vector3 (0, 59f * jump, 0); 
       if (gameObject.name == "P6") 
        rid.velocity = new Vector3 (0, 58.8f * jump, 0); 
       if (gameObject.name == "P7") 
        rid.velocity = new Vector3 (0, 58.6f * jump, 0); 
       if (gameObject.name == "P8") 
        rid.velocity = new Vector3 (0, 58.4f * jump, 0); 
       if (gameObject.name == "P9") 
        rid.velocity = new Vector3 (0, 58.2f * jump, 0); 
       if (gameObject.name == "P10") 
        rid.velocity = new Vector3 (0, 58f * jump, 0); 
       if (gameObject.name == "P11") 
        rid.velocity = new Vector3 (0, 57.8f * jump, 0); 
       if (gameObject.name == "P12") 
        rid.velocity = new Vector3 (0, 57.6f * jump, 0); 
       doubleJump = false; 
       jumping = false; 
      } 
     } 
+0

當你到達地面時,你是否將'doubleJump'&'jumping'設置爲false? – Knells

+0

是的,我做 \t if(isGrounded){ \t \t \t \t jumping = false; \t \t \t \t doubleJump = false; – soraka

+0

這種情況下,'跳躍'變量實際上並沒有做任何事情在塊o你已經發布的代碼,你可以把它拿出來。 'if(this.gameObject.name ==「P0」&& isGrounded &&!doubleJump &&!jumping)'可以是'if(this.gameObject.name ==「P0」&& isGrounded)''具有完全相同的功能 – Knells

回答

0

我覺得沒有必要用兩個變量「doubleJump &跳躍」 也許這項工作,檢查以下一個

if (this.gameObject.name == "P0" && isGrounded && !jumping) { 
      if (Input.GetMouseButtonDown (0)) { 
       jumping = true; 
       rid.velocity = new Vector3 (0, 50f * jump, 0); 
      } 
     } 


if (this.gameObject.name == "P0" && !isGrounded && jumping) { 
      if (Input.GetMouseButtonDown (0)) { 
       rid.velocity = new Vector3 (0, 60f * jump, 0); 
       jumping = false; 
      } 
     } 
+0

我使用兩個變量doublejump並跳轉,因爲我製作的遊戲就像殭屍海嘯。我的想法是我的第一個(P0)跳躍的主題,然後在第一個對象編輯我的代碼之後,(P1,P2,... Pn)後面的對象將跳轉到跳躍 – soraka

+0

我的問題是我的代碼但有時它失敗了,我真的不知道爲什麼 – soraka

+0

我們可以爲同樣的問題編寫不同類型的代碼,就像嘗試以其他方式編寫代碼,然後檢查工作是否正常,我現在沒有團隊協作,對不起 –

0
if (this.gameObject.name == "P0" && !isGrounded && doubleJump && jumping) { 
    if (Input.GetMouseButtonDown (0) && this.gameObject.name == "P0") { 
        rid.velocity = new Vector3 (0, 60f * jump, 0); 
        doubleJump = false; 

我的建議是,你從你的if語句刪除 '& &跳躍'。 希望它有幫助。

乾杯。