Форум: "Потрепаться";
Текущий архив: 2003.08.14;
Скачать: [xml.tar.bz2];
ВнизХитрый вопросец: создание поворачиваемого прицела Найти похожие ветки
← →
greenrul (2003-02-13 10:16) [0]Есть юнит, и при нажатии Влево/Вправо, его прицел должен по/против часовой стрелки ездить. Но если вставлять проверку нажатий в TMyUnit.DoMove, то прицел будет вертеться слишком быстро!
Как его замедлить? Пробовал делать отдельный таймер, но он слишком сильно затормаживает...
Текущий код:
Procedure TSnarad.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount);
if (isLeft in MainForm.DXInput1.States) then Dec(pusk_angle);
if (isRight in MainForm.DXInput1.States) then Inc(pusk_angle);
<...>
y:=SelectedUnit.Y+Weaponz[SelectedWeapon].speed*sin(DegToRad(pusk_angle))*(time/speed) + g*(((time*time)/(speed*speed))/2);
x:=SelectedUnit.x+Weaponz[SelectedWeapon].speed*cos(DegToRad(pusk_angle))*(time/speed);
end;
← →
pasha676 (2003-02-13 10:27) [1]Вообще-то что то мало что из кода понял. Но вообщем надо
-читать джойстик, величина от джойстика характеризует не угол, а ускорение изменение угла. Как я понял это ускорение надо умножить на коэффицент оружия. Коэффиценты подбираються эмпирическим путем :). Он может быть и весьма дробным.
- Каждую итерацию (обычно на вывод изображения завязано) прибавляем полученную величину к текущему углу наклона.
Что непонятно спрашивай.
← →
greenrul (2003-02-13 14:12) [2]если честно я вообще ничего тут не понял...
я ожидал рекомендации по коду - я раньше эту же функцию сделал потормознутей %), только забыл как это сделал
← →
Михаил (2003-02-13 15:05) [3]На самом деле pasha676 дал дельный совет в непонятной форме(никто не знает, причем тут джойстик, коэффициенты).
Суть в том, что вместо
if (isLeft in MainForm.DXInput1.States) then Dec(pusk_angle);
if (isRight in MainForm.DXInput1.States) then Inc(pusk_angle);
надо писать
if (isLeft in MainForm.DxInput1.States) then povorot := 0.01;
if (isLeft in MainForm.DxInput1.States) then povorot := -0.01;
а перед прорисовкой
pusk_angle := pusk_angle + povorot;
Другая простая идея(перед этим я какую-то чушь порол): сделать угол дробным.
← →
Михаил (2003-02-13 15:08) [4]Это все работает.
Зайди на www.mik-korobov.narod.ru
игрушка "Авиация" там сделана по этому принципу.
← →
pasha676 (2003-02-13 15:24) [5]2Михаил
Я просто имел в виду примерно следующее
if (isLeft in MainForm.DxInput1.States) then
( 0.01<собственно и есть коэффицент>) 2Михаил
Я просто имел в виду примерно следующее
if (isLeft in MainForm.DxInput1.States) then
povorot := (0.01<собственно и есть коэффицент>)*KWeapon
<коэффицент подвижности объекта>*DxInput1.States.X<вроде так там - если надо зависимость от джойстика>;
если не умножать на достаточно маленькие коэффиценты - то может происходить либо быстрое прибавление (если отрисовка ведеться часто) либо вообще прибавление в радианах. А 1 радиан - это уже до фига градусов.
← →
Михаил (2003-02-13 15:39) [6]Понятно.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.08.14;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c