XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
silumin

offline
Опыт: 11,153
Активность:
Угол ориентации юнита
Есть код:
Код:
function HellMillstone_RunAround takes nothing returns nothing
local integer i = GetIndex(GetExpiredTimer())
local real dx = GetUnitX(udg_DYN_Dummy[i])-GetUnitX(udg_DYN_Hero[i])
local real dy = GetUnitY(udg_DYN_Dummy[i])-GetUnitY(udg_DYN_Hero[i])
local real Ang = Atan2(dy,dx) + 0.0873
local real Dist = SquareRoot(dx*dx+dy*dy)
  if Dist<udg_DYN_CountR[i] then
    set Dist = Dist + 0.5
    call SetUnitX(udg_DYN_Dummy[i],GetUnitX(udg_DYN_Hero[i])+Dist*Cos(Ang))
    call SetUnitY(udg_DYN_Dummy[i],GetUnitY(udg_DYN_Hero[i])+Dist*Sin(Ang))
    call SetUnitFacing(udg_DYN_Dummy[i],Ang*57.3+90.)
    call TimerStart(udg_DYN_Timer[i],.02,false,function HellMillstone_RunAround)
  else
    call TimerStart(udg_DYN_TimerAlt[i],0.01,false,function ClearCell)
  endif
endfunction
Пока это только заготовка спелла и ничего кроме перемещения даммиков она не делает. Проблема в этой том, что юнит ориентируется передом не по направлению движения а хз как. Т.е. что-то неточно в этой строке:
Код:
call SetUnitFacing(udg_DYN_Dummy[i],Ang*57.3+90.)
Суть в ом, что к значению угла между героем и даммком добавляется 90 градусов, что теоритически должно дать требуемое значение угла ориентации юнита. Но юнит постоянно ориентируется на непонятный угол.
Старый 23.08.2010, 19:55
mitryz

offline
Опыт: 1,225
Активность:
Зачем к Ang*57.3 прибавлять 90?
mitryz добавил:
Ведь направление - это Ang, судя по строкам
call SetUnitX(udg_DYN_Dummy[i],GetUnitX(udg_DYN_Hero[i])+Dist*Cos(Ang))
call SetUnitY(udg_DYN_Dummy[i],GetUnitY(udg_DYN_Hero[i])+Dist*Sin(Ang))
тогда +90 бессмысленно
Старый 23.08.2010, 23:29
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
silumin, возможно проблема в отсутствии скобок, у меня было такое в одной функции
(Ang*57.3)+90.00
mitryz, очевидно же что автор хочет чтобы снаряд был повернут боком -.-
Старый 23.08.2010, 23:36
DragonSpirit
у - уходи
offline
Опыт: 22,625
Активность:
AlexKARASb, сначала всегда делается умножение
скоро в школу, вспомнишь ещё ;)
Старый 24.08.2010, 00:18
JassMan
свободен
offline
Опыт: 4,193
Активность:
где вы берёте такие цифры? —> 0.0873 и 57.3
bj_RADTODEG=57.2958279
bj_DEGTORAD=0.017453277
Чем точнее напишешь, тем меньше проблем будет. Для варовского калькулятора пофигу насколько дробны числа.
Старый 24.08.2010, 00:47
silumin

offline
Опыт: 11,153
Активность:
AlexKARASb, попробовал - не помогло. Я в растерянности. Буду сейчас уменьшать период таймера и выводить отладочную инфу.
DragonSpirit, это понятно, но ВЕ имеет в запасе несколько обалденных финтов навроде: скобок в вычислениях, непроставленного нуля после точки в реальном числе, присвоение значения локальной переменной при её инициализации (когда значение нужно впихивать через set) и прочее... То что вспомнилось.

silumin добавил:
JassMan, 57.29583 градусов = 1 радиан... 5 градусов = 0.0873 радиана.

silumin добавил:
DragonSpirit, кстати, классный трек! )

silumin добавил:
Вобщем уменьшил период, вывел отладочную инфу - всё работает как швейцарские часы, всё как задумывал, всё как ожидал. Увеличиваю период до требуемого - сразу трабл.
Походу даммик не успевает поворачиваться. Модель даммика - "Горючая смесь", улучшение орков после которого катапульты бъют пылающим снарядом. Вот модель этого снаряда и есть модель даммика.

Какие соображения, ребята?
Старый 24.08.2010, 01:27
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
ты любишь страпон и всякие там извращения?
Артте добавил:
да, я спрашиваю это, посмотрев на твой код. серьёзно
Старый 24.08.2010, 11:42
silumin

offline
Опыт: 11,153
Активность:
Артте, на вкус и цвет все фломастеры разные.
Делаю вконце концов для себя, а не по стандартам, денег за это не получаю. Соответсвенно как мне удобнее - так и программирую.

И следующий раз конкретизируй. А пока твой пост не содержит информации по теме т.е. просто оффтом.
Старый 24.08.2010, 14:14
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
нет, неет. Я узнал что хотел.
Так вот, первое, зачем ты проводишь расчеты, если потом результаты могут не использоваться? Второе, куча вызовов GetUnit(X|Y), зря.
call TimerStart(udg_DYN_Timer[i],.02,false,function HellMillstone_RunAround)
Это что? таймер стартует сам себя? Надеюсь ты понял.
silumin:
local real Ang = Atan2(dy,dx) + 0.0873
SetUnitFacing(udg_DYN_Dummy[i],Ang*57.3+90.)
То есть тебя не смущают вычисления в радианах, потом в градусах. НаЗачем?
Артте добавил:
silumin:
TimerStart(udg_DYN_TimerAlt[i],0.01,false,function ClearCell)
Это всё пишется в эту же функцию
Артте добавил:
И создавай дамми сразу с нужным углом, а не 0.
Старый 24.08.2010, 14:30
silumin

offline
Опыт: 11,153
Активность:
Цитата:
Сообщение от Артте
Так вот, первое, зачем ты проводишь расчеты, если потом результаты могут не использоваться?
Конкретнее?
Цитата:
Сообщение от Артте
Второе, куча вызовов GetUnit(X|Y), зря.
2 раза вычисляются координати Даммка, 1 раз вычисляются координаты Героя... Или ты предлагаешь всё забить в переменные?
Цитата:
Сообщение от Артте
Это что? таймер стартует сам себя? Надеюсь ты понял.
Делал перемещение даммика высокопереодическим триггером/таймером? Очень сомневаюсь, иначе не задавалбы глупейший вопрос.
Цитата:
Сообщение от Артте
То есть тебя не смущают вычисления в радианах, потом в градусах. НаЗачем?
Лол. Atan2(y,x) возвращает угол в радианах, Sin(a) Cos(a) берут угол в радианах. Только 1 функция в коде SetUnitFacing(u,a) берёт угол в градусах. Или ты предлагаешь пересчитать угол в градусы, а потом обратно переводить в радианы? Второй глупейший вопрос.
Цитата:
Сообщение от Артте
Это всё пишется в эту же функцию
Реализация некоторых спеллов требует запуска чистки ячейки через таймер.
Цитата:
Сообщение от Артте
И создавай дамми сразу с нужным углом, а не 0.
no comments

И как я уже сказал выше, вскрытие показало, что:
Цитата:
Сообщение от silumin
Вобщем уменьшил период, вывел отладочную инфу - всё работает как швейцарские часы, всё как задумывал, всё как ожидал. Увеличиваю период до требуемого - сразу трабл.
Походу даммик не успевает поворачиваться. Модель даммика - "Горючая смесь", улучшение орков после которого катапульты бъют пылающим снарядом. Вот модель этого снаряда и есть модель даммика.
Старый 24.08.2010, 17:52
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
silumin:
Реализация некоторых спеллов требует запуска чистки ячейки через таймер.
первый раз сталкиваюсь за 2 года написания в jass, к чему бы это. Хотя, разве что для удаления юнита через некоторое время. Но умные люди юзают life timer.
silumin:
Лол. Atan2(y,x) возвращает угол в радианах, Sin(a) Cos(a) берут угол в радианах. Только 1 функция в коде SetUnitFacing(u,a) берёт угол в градусах. Или ты предлагаешь пересчитать угол в градусы, а потом обратно переводить в радианы? Второй глупейший вопрос.
ты нихера не понял, этот вопрос закрыли. Поймешь когда-нибудь. надеюсь.
silumin:
Делал перемещение даммика высокопереодическим триггером/таймером? Очень сомневаюсь, иначе не задавалбы глупейший вопрос
прекращай фейлить, уже не интересно. Ах да, можешь глянуть физ движок моего авторства.
silumin:
Конкретнее?
Лол, ты вообще соображаешь? Что в моей фразе непонятно? Или ты условие не видишь у себя в коде?
Артте добавил:
silumin:
no comments
угол статичен, куда им поворачиваться после создания?
Старый 24.08.2010, 17:58
silumin

offline
Опыт: 11,153
Активность:
Цитата:
Сообщение от Артте
угол статичен, куда им поворачиваться после создания?
Ты в код всмотрись, а то уже терпения на твоё тупое упрамство не хватает.
Артте, мне надоело твое давление "аторитетом" или иначе назвать оффтопом. По теме сть что-нибудь? Нету - будь добр, не оффтопь.
Старый 24.08.2010, 20:01
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
жырнота
если ты не понимаешь о чем речь, это не означает что это что-то неверно или неразумно. тчк
Старый 24.08.2010, 20:05
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
silumin:
Но юнит постоянно ориентируется на непонятный угол
может скорость поворота юнита слишком мала и не работает при малом периоде?
Старый 24.08.2010, 20:51
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 03:40.