Какой тип обнаружения столкновений вы используете?
Если вы используете Rectangles и метод .intersects, вы всегда можете объявить bool, чтобы убедиться, что ваш персонаж касается пола. Если это не так, вы применяете гравитационный вектор, чтобы заставить его упасть на следующую плитку с другим прямоугольником, поэтому, когда он ударит по нему, он перестанет падать.
Если вы хотите заблокировать его из стороны в сторону, просто проверьте, с какой стороны прямоугольника он касается, и заблокируйте его движение по оси X.
Например, если он идет направо и пересекается с левой частью прямоугольника, блок - это движение «GoingRight».
if(myCharacterRectangle.Intersects(tileRectangle)
{
if(myCharacterPosition.X > (tilePosition.X)
{
//You know the character hits the Right part of the tile.
}
if(mycharacterPosition.X <= tilePosition.X)
{
//You know the character hits the Left Part of the tile.
}
}
То же самое относится и к Position.Y, если вы хотите проверить вершину или низ.
Если вы хотите использовать Pixel by Pixel для обнаружения столкновений с использованием Matrices, я знаю хороший учебник здесь .
Обнаружение вернет «Vector2 (-1, -1)», если столкновения нет.
Если он есть, метод возвращает координаты столкновений, что еще более облегчает определение того, к какой части тайла касается ваш персонаж.
Надеюсь, это поможет. Удачи в игре.