Здравствуйте!
Пишу игру по типу Хилл клаймб, только упор делаю на физику автомобиля, то есть, сцепление, кпп, все моделируется. Движение только по прямой, никаких горок.
Как мне смоделировть передачу энергии, сил от двигателя к колесам и обратно, учитывая при этом педаль сцепления?
Желательно без использования движков, так как времени вобрез, а работаю сам.
Реализация зависит от вашей архитектуры.
Я бы реализовал с помощью событий и слушателей:
нажал на кнопку «газ» → обновил мощность движка → он оповестил слушателей: сцепление → сцепление посмотрело на кпп и на уровень нажатия педали сцепления → передало свое значение в колеса
а на onUpadate (новый кадр) происходит уже расчет скорости колес (на основании значения полученного от сцепления, трения с землей, воздухом и т.п.)
Система событий и подписок мне в данном случае нравится куда больше, чем считать все разом на onUpdate, т.к. можно усложнять систему как угодно и легко делать «прокачку» запчастей (это ведь все разные объекты с разными настройками). Ну и локализовать ошибки будет проще.
p.s.
Я не профессиональный гейм-девелопер, а только учусь, и с радостью услышал бы совет профессионала, на чьем счету есть пара успешных игр :)
Спасибо за ответ, но все что вы перечислили, у меня уже сделано и оно даже ездит. Проблема конкретно с моелированием физики.
Как мне передать инерцию с двигателя на колеса при отпускании сцепления, или сделать чтобы на скоросте и при влюченой передаче при отпущеном газе кинетическая энергия с автомобиля передавалась двигателю итд?
При отпускании сцепления — точно так же как и в случае с газом: изменение сцепления → посмотрело на движок, кпп и свой уровень нажатия → передало своё значение в колеса.
Грубо говоря: clutch.onChange = function() { wheels.setPower( engine.power * kpp.gearratio * clutch.power ); }
А в обратную сторону уже в самом wheels.setPower можно описать function(power) {
var resistance = terrain.friction * wheels.friction;
wheels.power = power * resistance;
engine.setPower( wheels.power * clutch.power * kpp.gearratio );
wheels.setSpeed( wheels.power );
}
Хочу отдельно обратить внимание, что такой код лишь для понимания и лучше слушать изменения, а не писать как у меня с жесткими зависимостями :) Ну и если говорить о крутой физике, то все эти расчеты должны вестись для каждого колеса отдельно, еще будут различия в ведущих и ведомых колесах, и каждое должно смотреть на почву под ним ;)
Опять таки, я не спец. Но сделал бы так :) Надеюсь помог :)