Раньше меня это сбивало с толку, но есть решение: попробуйте выровнять его по поверхности приземления, измените его перед обновлением экрана, чтобы люди этого не заметили, это будет выглядеть так, как будто он двигается немного короче (правда немного). например:
if player.x < surface.x:
player.x = surface.x
update()
Немного дополнительно:
если вы хотите, чтобы гравитация работала, вы можете использовать аналогичный способ сделать это, при ударе по любой поверхности, установите гравитацию на 0 и измените x игрока ось к оси x поверхности