Как просчитать столкновение игрока с каждым объектом на сцене?
Всем привет! Имеется сцена, а на ней несколько объектов (платформ). Есть класс World, содержащий в себе список таких платформ. Чтобы просчитать столкновение игрока и платформы я использую следующий код:
foreach (var platform in world.platforms)
if (Position.Y + Height / 2 > platform.Start.Y && Position.X + Width / 2 > platform.Start.X && Position.X - Width / 2 < platform.End.X)
{
OnGroundCollision(platform.Start.Y - Height / 2);
readyToJump = true;
}
Однако при выполнении этого кода, если игрок перейдет под платформу, находящуюся выше него, он телепортируется на эту самую платформу, хотя должен идти дальше. В чем проблема?
Класс платформы:
public class Platform
{
public Point Start { get; set; }
public Point End { get; set; }
public int Width { get; set; }
public Platform(Point start, int width)
{
Start = start;
Width = width;
End = new Point(Start.X + Width, Start.Y);
}
}
Метод, если обнаруживается коллизия:
public void OnGroundCollision(float groundY)
{
if (Velocity.Y < -float.Epsilon)
return;
Position = new PointF(Position.X, groundY - 0.0001f);
Velocity = new PointF(Velocity.X, -Velocity.Y * Spring);
}