Ваш текущий код не имеет ускорения, отделенного от скорости.
скорость должна обновляться на основе ускорения, а не обновлять местоположения на основе ускорения.http://en.wikipedia.org/wiki/Acceleration
Ваше значение 5d занимает место массы.он говорит вам, сколько происходит для данной силы.
Вам необходимо сохранить переменные для местоположения
x, y
и скорости
v_x, v_y
, затем обновить местоположения с помощью
x <- x+ v_x* step_size
y <- y+ v_y* step_size
и обновите скорость:
v_x <- v_x + acceletation_x* 5d * step_size
v_y <- v_y + acceletation_y* 5d * step_size
Теперь отскок тривиален.Когда вы достигнете верхнего или нижнего края, просто переверните знак скорости: v_y -> -v_y, а для удара в сторону v_x -> -v_x.
Вы можете сделать отскок медленнее, чемисходная скорость, умноженная на постоянную при отскоке, например, v_x -> -v_x * 0,7, сделает скорость отскока 70% от начальной скорости.
Вам также может потребоваться некоторое трение, или вещи будут просто подпрыгиватьнавсегда.Либо вы изучаете и реализуете какую-то реальную модель для этого, либо просто используете какой-то дурацкий способ немного снизить скорость на каждом шаге.Самая простая вещь, которая может дать что-то вроде этого, на каждом шаге:
v_x <- v_x * 0.95
v_y <- v_y * 0.95