Я создаю 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 увеличивается, зависит от того, насколько игрок погрузится в землю. Большое ускорение приведет к тому, что игрок снова погрузится в плитку. Любая помощь приветствуется.
Это устранило проблему. Благодаря! –