Форум: "Игры";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
ВнизДвижение и торможение Найти похожие ветки
← →
P@uk (2004-08-02 21:33) [0]здравсивуйте. Проблемка у меня такова.
Недавно нашел интересную реализацию механизма движения, именно такую как мне было нужно для моей игрушки(спейс-шуттер).
Принцип следующий: клавишами "влево" и "вправо" объект(корабль) вращается(фактически указываем угол движения) а при нажатии клавиши "акселератор" увеличиваем скорость по такому принципу:XVel:=XVel+CosineArray^[Angle];
if XVel>5 then XVel:=5
else
if XVel<-5 then XVel:=-5;
YVel:=YVel+SineArray^[Angle];
if YVel>5 then YVel:=5
else
if YVel<-5 then YVel:=-5;
Думаю понятно, XVel и YVel скорость по Х и У, CosineArray и SineArray массивы заранее просчитаных значений синусов и косинусов. Максимальная скорость 5 поэтому проверяем на превышение предела.
В общем все просто, кстати взял из какого-то семпла на этом сайте, кажется Asteroid.
А проблемка появилась когда начал реализовывать "торможение". Можно конечно сразу сбросить XVel и YVel на 0, но нужна плавность.
С изменением скорости вроде понятноXVel:=XVel-CosineArray^[Angle];
YVel:=YVel-SineArray^[Angle];
А вот с пределами не получается. Точнее получается, но слишком много if-ов. Хотелось бы по лаконичнее.
Вопрос в первую очередь к тем кто работал с подобным механизмом.
Спасибо.
ЗЫ. Пожалуйста, хотелось бы услышать ответы по сути, а не нравоучения и остроты.
← →
Zer0 © (2004-08-02 23:01) [1]ограничение скорости:
после изменения всех(!) скоростей в любом направлении
вариант N-1 bad
XVel = Min(Max(XVel,-5),5)
YVel = Min(Max(YVel,-5),5)
плохой потому что в при движении строго по диагонали реальная скорость больше ограничения в sqrt(2) раза.
вариант N1
V= (XVel,YVel,ZVel) {вектор скоростей }
вычисляем длину D вектора V если она превышает заданный порог MaxVel то нормализуем вектор исходных скоростей V и умножаем его на этот самый порог
итого - имеем скорость строго меньшую или равную MaxVel
вариант N2
V=V*(1-f*t)
где f - констатна трения, пропорциональная скорости, t - время движения обьектов от расчета предыдущего кадра до этого (при использовании таймеров =1/частота таймера)
при желани можно поизвращаться и f сделать зависмой от скорости, квадрата скорости и проч.
итого плавное ограничене скорости
===========
торомжение
см вариант N2, тока врубаем трение когда зажата кнопка тормоза
===========
полет назад
именно он в примере и есть =)
зы а вам таки не н`гавяца нашы ост`готы? =)
← →
P@uk (2004-08-03 00:10) [2]Чтож, премного благодарен, есть над чем поковыряться.
> зы а вам таки не н`гавяца нашы ост`готы? =)
Боже-ж-мой, как ви могли так п"го нас подумать.
Просто после того как продолбешся полдня над такой вроде мелочью, и ждешь реального совета, особо не хочется получать ответы типа "сделай лучше тетрис","почитай книгу Ю.Суходрищенка "Полет и посадка в условяих нестабильной гравитации","Установи компонент TTormoz" итд.
Еще раз спасибо
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.033 c