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

Принятый ответ

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

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

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

upd м, нет, вру, не норм
Карта хоть и сохраняется без ошибок при отключении триггеров, но запустить по прежнему нельзя, в главное меню кидает. Удаление триггеров так же не помогло, хотя я ничего не трогал больше
0
32
3 года назад
0
Сиджас в последнем мемхаке наладили вот /nocjass стоят везде. Ты точно меня хорошо понял про pjass?
2
27
3 года назад
2
0
27
3 года назад
Отредактирован rsfghd
0
Bergi_Bear, отсюда качал pjass xgm.guru/p/wc3/easymem
Ошибка с блоком была из-за отключённого AdicParser'a, но в мемхаке включить его низя, иначе другая ерунда вылезет
МрачныйВорон, пасиб большое, теперь хоть через впадины нормально перелетает)
Однако мне всё равно интересно как замедлить/ускорить снаряд до/от середины полёта и можно ли как-нибудь эту силу прикрутить к параболе?
4
27
3 года назад
Отредактирован MpW
4
На скорую руку составил. Точно не могу сказать, что правильно. Но логически должно быть верным. Хочется на сие творение посмотреть)
Раскладываем скорость на векторы:
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 - какую вам надо
Загруженные файлы
2
21
3 года назад
Отредактирован scopterectus
2
Сам недавно делал способность с проджектайлом. Можно сделать без векторов и всяких косинусов и синусов. Код на 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 )
Но тут правда прямолинейное движение.
0
27
3 года назад
Отредактирован rsfghd
0
МрачныйВорон,
a = a + 1 - какую вам надо
хе, я бы и сам справился с ускорением/замедлением в полёте, но дело в том, что я не знаю на какое значение нужно замедлять/ускорять снаряд, если будет через твой пример, то снаряд может замедлиться не долетев до середины, в итоге он так и повиснет в воздухе, потому что середину не перелетел, где должно было начаться ускорение
раскрыть
Загруженные файлы
1
21
3 года назад
1
rsfghd, это нужно будет рассчитывать в зависимости от расстояния. Например, задаёте изначальную скорость и умножаете на процент пройденного пути. В итоге, когда снаряд долетит до конца пути - получит все 100 % ускорения. Или наоборот, тогда снаряд в конце будет иметь нулевое ускорение.

Ну или придумать свою формулу. Всё зависит от конкретного случая.
0
32
3 года назад
0
Как насчёт юзать аксид бомбу и не парится?
1
27
3 года назад
Отредактирован MpW
1
продолжение
углы надо найти, чтобы направление векторам задавать. Для этого нужно просчитать вектор движения 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
Загруженные файлы
0
27
3 года назад
Отредактирован rsfghd
0
ScopteRectuS, я пытался через процент, но видимо косячил где-то..
quq_CCCP, мне нужно будет манипулировать снарядом как мне угодно
МрачныйВорон,
a = R/(L/2)
я именно так и пробовал, но благодаря тебе я сейчас понял где допускал ошибку каждый раз, теперь я поправил это, спасибо)

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