Чел, я ж уже давал пример (выложу тут, может, кому-то поможет):
Jumping_cube.zip
Тут все имхо понятно.
Есть вектор направления прыжка, который описывается всего одной переменной (т.к. прыжок происходит только по оси Y).
Когда игрок хочет прыгать, задаём этому вектору большое значение.
Этот вектор меняется в соответствии с силой тяжести (просто вычитаем каждый цикл из вектора число N)
И каждый цикл перемещаем игрока по этому вектору.
В результате игрок летит по параболе.
Когда игрок коллизится с землёй, перестаём его перемещать по вектору прыжка ибо он уже не прыгает.
Вообще, это элементарная кинематика из курса физики средней школы.
Ну что непонятного?
З.Ы. у тебя переменная jump_speed не дробная, потому и не получается. 0.51 округляется до 1, а всё, что меньше - до 0
надо так объявлять при первом использовании
jump_speed
#=.....