XNA 2D Platformer-гравитация заставляет спрайт погружаться в плитку
Я создаю 2D-платформер в XNA, и у меня возникли некоторые проблемы с гравитацией. Моя гравитация заставляет игрока погружаться в плитку, а не приземляться сверху. Вот моя реализация гравитации:
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 увеличивается на то, насколько игрок будет погружаться в земля. Большое ускорение заставит игрока погрузиться еще глубже в плитку. Любая помощь ценится.