Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
14-45149
Nick-From
2003-07-31 00:28
2003.08.14
ищу скрипт


14-45009
Olexandr
2003-07-23 18:06
2003.08.14
3D компонент


14-44989
Andryk
2003-07-28 18:00
2003.08.14
И у нас тоже появилась вакансия


14-45127
Сёма
2003-07-30 23:30
2003.08.14
Вопрос на засыпку


14-45155
3asys
2003-07-30 17:04
2003.08.14
Работа с электронной подписью в Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский