Phaser вычисляет необходимую скорость y для данной точки y

В моей мобильной игре главному герою нужно прыгнуть в определенную точку y, прежде чем снова начать падать под действием силы тяжести. Как я могу рассчитать скорость y, которая мне понадобится, чтобы достичь (на пике) данной позиции y с заданной силой тяжести?

Я попытался сделать это с подростком, а не с аркадной физикой, потому что это было именно то, что мне было нужно (расстояние, пройденное с течением времени с эффектом гравитации), но производительность была невысокой и постоянно возникало разбрызгивание.

Сейчас я использую Phaser 2.6.2. Спасибо!


person Kody R.    schedule 30.10.2018    source источник


Ответы (1)


В играх есть 2 вида времени: время на основе цикла и deltaTime.

В сценарии, основанном на циклах, физика не переключается на учет задержек, поэтому лучшим решением будет следующее:

Вы начинаете с числовой последовательности, где вы складываете силу тяжести с предыдущим числом в последовательности, пока ваша общая сумма не станет равной желаемой высоте.

Для примера я буду использовать height = 75, gravity = 5 и jumpForce = unknown.

(5+10+15+20+25)=75

Сила прыжка, необходимая для достижения этой высоты, будет последним числом в последовательности, равным «25».

В сценарии deltaTime (как в данном случае) физика абстрагируется, чтобы попытаться приспособиться ко времени.

Итак, если у вас 5 кадров в секунду, у вас будет 5 циклов в секунду. если у вас 20 кадров в секунду, у вас будет 20 циклов в секунду; Итак, эта абстракция делает вышесказанное несущественным.

Вместо этого используйте стандартную формулу гравитации: высота = скорость ^ 2 / (2 * гравитация)., Потому что это будет лучше моделировать формулы, используемые механизмами дельта-времени.

person Nosajimiki    schedule 30.10.2018
comment
Я не уверен, что я не понимаю вашу логику или это просто не работает в моей ситуации. Я использую гравитацию 1400, но расстояние, которое мне нужно преодолеть, составляет 440. - person Kody R.; 30.10.2018
comment
Попробуйте высоту = скорость ^ 2 / (2 * сила тяжести). Итак: JumpVelocity = 1110. - person Nosajimiki; 31.10.2018
comment
Второй невероятно близок! Это просто немного отклоняется, когда я удваиваю и утрою гравитацию (это было примерно на 8 пикселей меньше, когда я удвоил гравитацию), но я думаю, что это то, что я могу внести незначительную корректировку, поскольку я увеличиваю скорость всего! Пожалуйста, отредактируйте свой ответ, и я отмечу его как правильный :) - person Kody R.; 31.10.2018
comment
Эта погрешность связана с округлением. Часто считается, что дельта-время лучше для разработки игр, потому что оно не дает задержкам замедлять игровой процесс, но оно также имеет ряд недостатков, когда речь идет о точном моделировании физики. Чтобы учесть это в дизайне уровней, запишите высоту прыжка без задержек, а затем попытайтесь отстать от компьютера другими вещами, чтобы создать сценарий с высокой задержкой. Если это приводит к разной высоте прыжка, убедитесь, что все проходимые зоны могут быть достигнуты с меньшей высотой прыжка, а все непроходимые зоны могут блокировать большую. - person Nosajimiki; 31.10.2018