Кучу времени убил на это, страдая всякой ерундой, пытался раза 4 поискать в инете хоть какие-нибудь наработки, но видимо плохо ищу
В общем, как сделать снаряд, который игнорил бы впадины, ускорялся/замедлялся в зависимости от дуги и поворачивал бы свой носик на нужный градус (SetUnitLookAt)?
Может у кого есть наработка или ссылка?
upd я пока не в состоянии разобрать вектор и буду очень благодарен, если ответ будет через хэш-таблицу
1.26а

Нужен мемхак или рефордж, чтобы поворачивать эффект по всем направлениям Yaw, Pitch, Roll
Всё остальное костыли 2005 года, оставьте их там же
(я про ту самую модель даммики с 360 анимациями для всех поворотов)
И разумеется 100% делать через эффект, никак юнитов

Тоже самое возможно на 126, 127, 128, просто возьмите это
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
28
Bergi_Bear, сохраняло спокойно, а конкретно мой триггер - нет
Это из-за cjass'a что ли?
Вот даже отключил свои триггеры, снова сохранил и всё норм

upd м, нет, вру, не норм
Карта хоть и сохраняется без ошибок при отключении триггеров, но запустить по прежнему нельзя, в главное меню кидает. Удаление триггеров так же не помогло, хотя я ничего не трогал больше
33
Сиджас в последнем мемхаке наладили вот /nocjass стоят везде. Ты точно меня хорошо понял про pjass?
28
Bergi_Bear, отсюда качал pjass xgm.guru/p/wc3/easymem
Ошибка с блоком была из-за отключённого AdicParser'a, но в мемхаке включить его низя, иначе другая ерунда вылезет
МрачныйВорон, пасиб большое, теперь хоть через впадины нормально перелетает)
Однако мне всё равно интересно как замедлить/ускорить снаряд до/от середины полёта и можно ли как-нибудь эту силу прикрутить к параболе?
27
На скорую руку составил. Точно не могу сказать, что правильно. Но логически должно быть верным. Хочется на сие творение посмотреть)
Раскладываем скорость на векторы:
Vx=1,Vy=1,Vz=1 - изначально скорость нулевая, тк ракета еще не вылетела. Когда мы запустим, наша скорость будет равна 1. Скорости придает ускорение.
a=0 - ускорение. Изначально оно равно нулю, таймером каждую секунду увеличиваем наше ускорение. Когда снаряд достигнет середины дуги, или половины пройденного пути, тогда уже наше ускорение превращается в понижение. Будет постепенно понижаться до нуля.
Ux,Uy,Uz - тек положение нашего снаряда
каждую секунду тикаем таймером:
изменяем нашу скорость. Вот здесь я не уверен. Надо самому потестить, устал. Но взял из учебников физики. av-physics.narod.ru/mechanics/acceleration.htm простенькая формула.
Vx = Vx + at
Vy = Vy + at
Vz = Vz + at
изменяем наше положение снаряда. черт, забыл углы. ведь координаты, а тут углы. забыл относительно чего углы брать. Углы надеюсь сможешь понять как, а то лень через арккосинус
раскрыть
Ux = Ux + Vx * Sin(theta) * Cos(phi)
Uy = Uy + Vy * Sin(theta) * Sin(phi)
Uz = достаем нужную высоту из параболы (Uz + Vz * Cos(theta) )
//увеличиваем скорость
a = a + 1 - какую вам надо
Загруженные файлы
21
Сам недавно делал способность с проджектайлом. Можно сделать без векторов и всяких косинусов и синусов. Код на Lua и Reforged, но тут главное арифметика, а не функции:
    -- arrowX/Y/Z - текущее положение снаряда
    -- arrowTargetX/Y/Z - куда должен лететь снаряд
    -- 32.8125 - скорость снаряда (расстояное, которое проходит снаряд за один тик таймера)

    local dx   = arrowTargetX - arrowX
    local dy   = arrowTargetY - arrowY
    local dz   = arrowTargetZ - arrowZ
    local dist = math.sqrt( ( dx ^ 2 ) + ( dy ^ 2 ) + ( dz ^ 2 ) )

    arrowX = arrowX + 32.8125 * ( dx / dist )
    arrowY = arrowY + 32.8125 * ( dy / dist )
    arrowZ = arrowZ + 32.8125 * ( dz / dist )

    BlzSetSpecialEffectX( arrow, arrowX )
    BlzSetSpecialEffectY( arrow, arrowY )
    BlzSetSpecialEffectZ( arrow, arrowZ )
Но тут правда прямолинейное движение.
28
МрачныйВорон,
a = a + 1 - какую вам надо
хе, я бы и сам справился с ускорением/замедлением в полёте, но дело в том, что я не знаю на какое значение нужно замедлять/ускорять снаряд, если будет через твой пример, то снаряд может замедлиться не долетев до середины, в итоге он так и повиснет в воздухе, потому что середину не перелетел, где должно было начаться ускорение
раскрыть
Загруженные файлы
21
rsfghd, это нужно будет рассчитывать в зависимости от расстояния. Например, задаёте изначальную скорость и умножаете на процент пройденного пути. В итоге, когда снаряд долетит до конца пути - получит все 100 % ускорения. Или наоборот, тогда снаряд в конце будет иметь нулевое ускорение.

Ну или придумать свою формулу. Всё зависит от конкретного случая.
32
Как насчёт юзать аксид бомбу и не парится?
27
продолжение
углы надо найти, чтобы направление векторам задавать. Для этого нужно просчитать вектор движения dx,dy,dz
Ux,Uy,Uz - тек точка
Tx,Ty,Tz - конечная точка, куда должен прилететь снаряд
dx = Ux-Tx
dy = Uy-Ty
dz = Uz-Tz
theta = Atan2(SquareRoot(dx*dx + dy*dy), dz)
phi = Atan2(dy/dx)
rsfghd, ну вы должны сами понимать наскока она увеличивает/понижает скорость. Тут еще как бы есть время t, помноженное на ускорение a. t счетчик времени у вас растет? Очень сильно увеличивает вперед из-за времени. А еще как сильно понижаться будет?

Есть мысль, что половину пути L/2 приравнять - 100% или к max_a =1.00
R - расстояние между тек точкой снаряда и серединой маршрута
L - это расстояние от начала движения до конечного
a = R/(L/2) - вот процент ускорения (от 1 до 0). чем ближе ваша точка находится к центру дуги или середины маршрута, тем ниже процент a. В центре дуги ускорения не останется (a=0). и она начнет убывать (a<0 - типа под гравитацией). когда долетает до середины дуги. мы меняем знак наверное? и надо делать со счетчиком времени t, типа убывать, а то обратно будет удвоенно понижать.
Вопрос: что делать дальше? после центра дуги параболы? Ведь нужно, чтобы скорость понижалась, ведь в центре дуги достигла макс скорости. Теперь она должна понижаться по формуле: U = U0 - at
Вторая проблема - это счетчик времени t, если продолжит дальше увеличиваться, то это сильно повлияет на скорость. Я не знаю точного ответа, надо тестить. надо простенький пример какой-то провести, чтоб проверить. Ведь счетчик времени является множителем, очень сильно торможение будет, так и не долетит до цели. Возможно стоит убавлять счетчик или обнулить.
пример
a - коэф сильно зависит от расстояния.
в итоге это мб не то что нужно. дело в том, что до цели долетает совсем ослабленный снаряд. он долетит до цели со скоростью U=1. мб надо вначале придать ускорение увеличивать в 2 раза, чтобы не казался слабысм

1
Загруженные файлы
28
ScopteRectuS, я пытался через процент, но видимо косячил где-то..
quq_CCCP, мне нужно будет манипулировать снарядом как мне угодно
МрачныйВорон,
a = R/(L/2)
я именно так и пробовал, но благодаря тебе я сейчас понял где допускал ошибку каждый раз, теперь я поправил это, спасибо)

upd ох.. даже не знаю чей ответ то выбрать, все очень сильно помогли)
ещё раз поблагодарю Ворона)
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.