Звучит как включение «подъема», основанного на горизонтальной скорости, и нажатие кнопки запускает движение «носом» достаточно хорошо.
Таким образом, lift
будет некоторой константой k
, умноженной на горизонтальную скорость Vx
и вертикальную скорость Vy
, будет разница в gravity
и lift
раз во времени dt
lift = k * Vx
Vy += ( lift - gravity ) * dt
def noseup
k = 0.01 #some small chunk
dx = k * Vx
dy = k * Vy
Vx -= dy
Vy += dx
Когда самолет (или что-то еще) обнюхивается, он в основном снижает скорость на одной оси, увеличивая ее на другой.
Вероятно, было бы неплохо было бы добавить туда где-нибудь также drag
, теперь, когда я об этом думаю, она должна зависеть от абсолютной скорости V = ( Vx**2 + Vy**2 )**0.5
... и вес - это лучшее слово, чем гравитация в этом случае (менее запутанно, единицы измерения), но я думаю, что это работает.
Не совсем "физика", но близкое приближение, которое должно работать довольно хорошо. Поиграйте со значениями k и посмотрите, сможете ли вы сделать так, как вы хотите.
Кстати, простите за супер дерьмовый псевдокод: -P