Короче говоря, я делаю платформенную игру. Я еще не достаточно взрослый, чтобы принять Calculus, поэтому я не знаю производных или интегралов, но знаю о них. Желаемое поведение для моего персонажа - автоматически прыгать, когда по обе стороны от него находится блок, который выше того, на котором он стоит; например, лестница. Таким образом, игрок может просто удерживать левую / правую, чтобы подняться по лестнице, вместо того, чтобы спамить спам тоже клавишей.
Проблема в том, как я реализовал прыжки; Я решил пойти в стиле марио и позволить игроку дольше удерживать «прыжок», чтобы прыгать выше. Для этого у меня есть переменная «jump», которая добавляется к скорости Y игрока. Переменная прыжка увеличивается до установленного значения при нажатии клавиши «прыжок» и уменьшается очень быстро после отпускания клавиши «прыжок», но уменьшается не так быстро, пока вы удерживаете клавишу «прыжок», обеспечивая непрерывное ускорение до тех пор, пока вы держите «прыгать». Это также создает приятный плавный прыжок, а не резкое визуальное ускорение.
Итак, чтобы учесть переменную высоту лестницы, я хочу иметь возможность точно рассчитать, какое значение должна получить переменная 'jump', чтобы точно перейти на высоту лестницы; желательно не больше, не меньше, хотя немного больше допустимо. Таким образом, персонаж может прыгать по крутым или неглубоким лестничным пролетам, при этом он не выглядит странно или медленно.
По сути, в игре 5 переменных:
h -the height the character needs to jump to reach the stair top<br>
j -the jump acceleration variable<br>
v -the vertical velocity of the character<br>
p -the vertical position of the character<br>
d -initial vertical position of the player minus final position<br>
Each timestep:<br>
j -= 1.5; //the jump variable's deceleration<br>
v -= j; //the jump value's influence on vertical speed<br>
v *= 0.95; //friction on the vertical speed<br>
v += 1; //gravity<br>
p += v; //add the vertical speed to the vertical position<br>
v-initial is known to be zero<br>
v-final is known to be zero<br>
p-initial is known<br>
p-final is known<br>
d is known to be p-initial minus p-final<br>
j-final is known to be zero<br>
j-initial is unknown<br>
Учитывая все эти факты, как я могу составить уравнение, которое решит для j?
tl; dr Как мне вычислить?
Огромное спасибо всем, кто сделал это так далеко и решил решить эту проблему.
Редактировать: вот график, который я сделал на примере в Excel.
Я хочу уравнение, которое позволит мне найти значение для A, учитывая желаемое значение для B.
Поскольку переменная прыжка со временем уменьшается, значение позиции - это не просто парабола.