2015-10-02 25 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语句删除 '& &跳跃'。 希望它有帮助。

干杯。