Алгоритм рулевого управления?

Я уже спрашивал что-то подобное, но теперь у меня проблема с управлением и реализацией "реалистичного" рулевого управления для простой 2d (сверху вниз) автомобильной гоночной игры.

Как я могу сделать "реалистичное" рулевое управление для автомобиля? (Я использую C#, но приветствуется другой язык;)) Использование Sin и Cos? Если да, то как? Заранее спасибо!

3 ответа

Решение

У меня обеденный перерыв, поэтому я не могу отдать должное "лучшему" ответу, но псевдокод выглядит примерно так:

y_change = sin(rotation) * speed;
x_change = cos(rotation) * speed;

car.x += x_change;
car.y += y_change;

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

Вы, вероятно, захотите использовать физический движок, который кто-то другой уже создал. Я слышал хорошие вещи об API XNA Physics.

Я полагаю, что вам придется использовать синус и косинус, но это только верхушка ОЧЕНЬ большого айсберга...

Полезный ответ Брайана Дрисколла десять лет назад - это все, что вам нужно знать об этом для нетребовательных приложений. Я часто использую эйлеровское интегрирование положения через вектор скорости, измененный ускорениями от контроллера.

Интересным моментом для колесных транспортных средств является то, что они не вращаются вокруг своего центра тяжести. Типичный автомобиль вращается вокруг оси вдоль линии задней оси, но хорошо смещается в сторону.

Эта концепция важна для реальных автомобилей. Их рулевой механизм пытается соответствовать геометрии рулевого управления Ackermann, чтобы минимизировать износ из-за проскальзывания. В смоделированных транспортных средствах эти соображения важны для моделирования мгновенной кривизны и прогнозирования будущей траектории.

Алгоритм это:

  1. Запишите, как кто-то другой ездит (используя версию игры)

  2. (Необязательно) Разделите запись на фрагменты для различных обычных ситуаций.

  3. Переиграйте записи в игре. (Использование подходящих фрагментов и, возможно, интерполяция траектории между ними).

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

Модель будет:

x = integrate horiz_velocity by t
horiz_velocity = intergate steering_angle by t
and steering_angle = fuzzy_steering_function(...)
Другие вопросы по тегам