Question by 
               Konomira · Oct 16, 2015 at 09:05 PM · 
                c#2djumpplatformerground detection  
              
 
              Checking if the player jumps while not grounded
In my 2D platformer, I have integrated a system where the player can jump up to 3 times, but only if there is a floor above them. When they jump for the second time, I want a LineRenderer to draw a line to a spot on the floor above them, giving the effect of them attaching a rope. My problem is that the rope appears on their first jump as well as the second and third. Here is the code that controls the rope:
 Vector2 ropePosition = transform.FindChild("rope").GetComponent<Transform>().position;
 
         ropePosition.x = GetComponent<Transform>().position.x + GetComponent<Rigidbody2D>().velocity.x;
 
         ropePosition.y = GetComponent<Transform>().position.y + (height * 3);
 
         if (Physics2D.Raycast(GetComponent<Transform>().position, ropePosition - new Vector2(GetComponent<Transform>().position.x, GetComponent<Transform>().position.y), Vector2.Distance(GetComponent<Transform>().position, ropePosition)))
         {
             if (!grounded && Input.GetKey(KeyCode.W) && ropesLeft > 0)
             {
 
                 RaycastHit2D[] ropeHit;
                 ropeHit = Physics2D.RaycastAll(GetComponent<Transform>().position, ropePosition - new Vector2(GetComponent<Transform>().position.x, GetComponent<Transform>().position.y), Vector2.Distance(GetComponent<Transform>().position, ropePosition));
 
                 ropeLine.SetPosition(0, GetComponent<Transform>().position);
 
                 ropeLine.enabled = true;
                 if (ropeHit[0])
                 {
                     if (ropeHit[0].collider.tag == "floor" && Input.GetKeyDown(KeyCode.W) && !grounded)
                     {
                         ropeLine.SetPosition(1, ropeHit[0].point);
                         GetComponent<Rigidbody2D>().velocity = Vector2.zero;
                         GetComponent<Rigidbody2D>().AddForce((ropePosition - new Vector2(GetComponent<Transform>().position.x, GetComponent<Transform>().position.y)) * 75);
                         ropesLeft--;
                     }
                 }
             }
             else
             {
                 ropeLine.enabled = false;
             }
         }
         transform.FindChild("rope").GetComponent<Transform>().position = ropePosition;
 
The boolean grounded is set to true in an OnCollisionStay2D and is set to false in an OnCollisionExit2D function. It seems that I can't check if the player presses "W" while not grounded because jumping sets grounded to false. Any idea how I'd fix this? 
               Comment
              
 
               
              Your answer
 
 
              koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                