2015-10-02 3 views
0

это мой код для обработки двойного прыжка. Но иногда он не работает.Двойной прыжок не работает, как ожидалось

В первый раз, когда я касаюсь экрана, мой персонаж прыгает вверх (переменная doublejump = true). Когда я касаюсь экрана во второй раз, мой персонаж прыгает выше (двойной прыжок = ложь) (двойной прыжок работал).

Но иногда, когда я коснуться экрана в первый раз (нет необходимости прикасаться к экрану во второй раз) doublejump переменного = лжи (двойной прыжок не работает, как я ожидал)

Помогите мне исправить

Мой код:

 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 если (isGrounded) { \t \t \t \t прыжки = ложь; \t \t \t \t doubleJump = false; – soraka

+0

В этом случае переменная 'jumping' на самом деле ничего не делает в блоках 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 и jump, потому что я делаю игру как цунами Zombie. И моя идея является предметом моего первого (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; 

Мое предложение состоит в том, что вы удалите «& & прыжков» из, если заявления. Надеюсь, это поможет.

Cheers.

Смежные вопросы