Есть одна вещь, которая озадачивает меня, а именно, как осуществить «искусственный импульс» прыжок в платформер. Если вы не знаете, о чем я говорю, подумайте о прыжках Марио, Кирби и Цитаты из Cave Story. Что у них общего? Ну, высота вашего прыжка определяется тем, как долго вы удерживаете нажатой кнопку прыжка.
Зная, что «импульсы» этого персонажа строятся не перед его прыжком, как в реальной физике, а скорее в воздухе - то есть вы можете очень хорошо поднять палец на полпути максимальной высоты, и он остановится, даже если с разгон между ним и полной остановкой; вот почему вы можете просто нажать на прыжок и удерживать его для долгого прыжка - я зачарован тем, как они сохраняют свои траектории как дуги.
Моя текущая реализация работает следующим образом:
Пока кнопка прыжка нажата, гравитация выключена, а Y-координата аватара уменьшается на постоянное значение гравитации. Например, если вещи падают на Z единиц на тик, он будет расти на Z единиц на тик.
Как только кнопка отпущена или предел достигнут, аватар замедляется до такой степени, что он покрывает X единиц, пока его скорость не достигнет 0; как только он это делает, он ускоряется до тех пор, пока его скорость не будет соответствовать гравитации - следуя примеру, я мог бы сказать, что он ускоряется от 0 до Z единиц / тик, все еще покрывая X единиц.
Эта реализация, однако, делает прыжки слишком диагональными, и если скорость аватара не будет больше силы тяжести, что сделает его слишком быстрым в моем текущем проекте (он движется со скоростью около 4 пикселей на такт, а гравитация составляет 10 пикселей на такт, в частота кадров 40FPS), это также делает его более вертикальным, чем горизонтальным. Те, кто знаком с платформерами, заметят, что прыжок по дуге персонажа почти всегда позволяет ему прыгать дальше, даже если он не так быстр, как гравитация в игре, и когда он этого не делает, если его не правильно сыграть, он окажется очень нелогично. Я знаю это, потому что могу засвидетельствовать, что моя реализация очень раздражает.
Кто-нибудь когда-либо пробовал подобную механику, и, возможно, даже преуспел? Я хотел бы знать, что стоит за этим видом прыжков в платформер. Если вы никогда не сталкивались с этим заранее и хотите попробовать, то, пожалуйста, не пытайтесь исправить или улучшить мою объясненную реализацию, если я не был на правильном пути - попробуйте придумать свое решение от царапина. Мне все равно, используете ли вы гравитацию, физику или еще что-то, поскольку это показывает, как работают эти псевдоимпульсы, оно выполняет свою работу.
Кроме того, я хотел бы, чтобы его презентация избегала языкового кодирования; например, делимся с нами примером C ++ или Delphi ... Как бы я ни использовал фреймворк XNA для своего проекта и не стал бы возражать против C #, у меня не хватает терпения читать чужой код, и я Некоторым разработчикам игр на других языках будет интересно, чего мы добиваемся здесь, так что не стесняйтесь придерживаться псевдокода.
Спасибо заранее.