2014-01-03 2 views
2

Я создаю 2D-платформер в XNA, и у меня возникают проблемы с гравитацией. Моя сила тяжести заставляет игрока погрузиться в плитку, а не землю сверху. Вот моя реализация тяжести:XNA 2D Platformer - Гравитация приводит к тому, что спрайт опускается в плитку

 if (willPlayerCollide(State.Decending) == false) 
     { 
      changeState(State.Decending); 

      onGround = false; 
      velocity.Y += 0.1f; 
      position.Y += velocity.Y; 

      positionRect = new Rectangle((int)position.X, (int)position.Y, spriteWidth, spriteHeight); 
      futurePositionRec = new Rectangle((int)position.X, (int)position.Y + 1, spriteWidth, spriteHeight); 

      debug = velocity.Y.ToString(); 

     } 
     else 
     { 
      changeState(State.Idle); 
      onGround = true; 
      velocity.Y = 0.0f; 
     } 

Соответствующая часть кода обнаружения столкновений для willPlayerCollide является:

 else if (potentialState == State.Decending) 
     { 
      futurePositionRec = new Rectangle((int)position.X, (int)position.Y + 1, spriteWidth, spriteHeight); 

      for (int i = 0; i < Level.impassableTileRecs.Count(); i++) 
      { 
       if (futurePositionRec.Intersects(Level.impassableTileRecs[i])) 
       { 
        collided = true; 
        tileCollRect = Level.impassableTileRecs[i]; 
       } 
      } 
     } 

С помощью этого кода, так как игрок падает, он будет тонуть частично в плитке. В зависимости от того, насколько велика величина, в которой скорость. Y увеличивается, зависит от того, насколько игрок погрузится в землю. Большое ускорение приведет к тому, что игрок снова погрузится в плитку. Любая помощь приветствуется.

ответ

0

Это происходит потому, что вы меняете только скорость спрайта, и его положение Y сохраняется, когда оно падает на землю. При установке на tileCollRect.Y - spriteHeight при столкновении с землей необходимо устранить проблему.

+0

Это устранило проблему. Благодаря! –

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

  • Нет связанных вопросов^_^