Добавлен Darknessay
Помогите понять в чем проблема, пожалуйста -.-
Снаряд создается с небольшим смещением от героя(правее или левее) и летит по дуге в точку каста.
Смещение = 45 либо -45(рандомно), это же и поворот снаряда исходный.
По формуле мана снаряда устанавливается как = значение, которое должно вычитаться от его текущего поворота, чтобы он собственно летел по дуге, поворачиваясь.
Снаряд создается с небольшим смещением от героя(правее или левее) и летит по дуге в точку каста.
Смещение = 45 либо -45(рандомно), это же и поворот снаряда исходный.
По формуле мана снаряда устанавливается как = значение, которое должно вычитаться от его текущего поворота, чтобы он собственно летел по дуге, поворачиваясь.
Так вот, почему то финальный угол, который должен быть равен +-90(типа полный поворот снаряда к концу пути = дуга), в итоге равняется 115(где то при 1000 расстояния), а сам снаряд, кажется, долетает расстояние до точки каста, но не формирует полную дугу - чем дальше точка каста. Т.е. он умирает левее или правее точки каста(на глаз, где то на 250-500 от точки каста, при расстоянии в 2000).
Я думаю дело в неверных расчетах с 3.14, но что не так?
Запуск:
Запуск:
Движение(каждые 0.03):
Принятый ответ
Кстати можно двигать так:
скрины формулы
есть форму скорпа
function geoArc takes real wayAbsolute returns real
return sin((bj_PI / 2.0) * wayAbsolute)
endfunction
function GeoArcBetweenReal takes real wayMin, real wayMax, real wayNow returns real
return geoArc((wayNow-wayMin) / (wayMax-wayMin))
endfunction
function GeoArcRelative takes real wayMin, real wayMax, real wayNow, real resultMin, real resultMax returns real
return (GeoArcBetweenReal(wayMin,wayMax,wayNow) * (resultMax-resultMin)) + resultMin
endfunction
вызываешь GeoArcRelative(тут начало отсчета, тут конец отсчета, тут место где находится сейчас, тут минимальный нужный результат, тут максимальный нужный результат) возвращает значение между последними двумя относительно того, как далеко wayNow переместилась между первыми двумя
вобще это в 2D, а надо в 3D - добавь полярные координаты, или сделай отдельно для каждого измерения...ну у тебя есть Z допустим пол это 50, потолок (самый верх параболы) - это 300
юнит идет от точки 0 до точки 1000, вот он идет, идет, где он щас находится пусть будет X
set unitZ = GeoArcRelative(0, 1000, X, 50, 300)
wayMin - минимальная расстояние (можно поставить ноль)
wayMax - максимальная точка (ставите нужный размер длины дуги)
wayMin и wayMax образуют отрезок (длину дуги)
wayNow - текущее положение точки
resultMin - минимальная высота
resultMax - максимальная высота
карта
wayMax - максимальная точка (ставите нужный размер длины дуги)
wayMin и wayMax образуют отрезок (длину дуги)
wayNow - текущее положение точки
resultMin - минимальная высота
resultMax - максимальная высота
карта
еще есть бросок Tiny из доты и бросок из Пуджа Варс (надыбил на форуме). Код очень отличается от типичной параболы у нас на сайте в алгоритмах, там за основу счетчик берется. Мне понравился бросок из Пуджа Варс. Все эти примеры скинул в карту Только в наработке с Toss Tinny, которую скинул, есть небольшая накладка, там у него два скила (спешил и не посмотрел), и нужно поменять id-приказ у канала, тогда будет все ок (не знаю, почему дал ему вторую, мне казалось крута сравнить, щас не кажется)
Загруженные файлы
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован MpW
дождись клампаОтредактирован Darknessay
Я не силен в терминологии. Вектор = направление, верно?
Если у меня получится потом раздуплиться в топорах - сделаю дугу, но это мой загон, не принципиально, а вот момент в вопросе выше - вполне себе важная штука(например, герой должен разбрасывать кольцом вокруг себя 8 снарядов, каждый снаряд должен лететь от героя по параболе(типа он их подкинул ,а потом они падают). их исх. высота = 125, и эту высоту я сниму дополнительным таймером, пока они будут лететь, но эта парабола фиксирует высоту и снаряды сразу перемещаются в Z=0.00, а потом от 0 делают свою параболу - ну, а нужно чтобы они стартовали у него над головой, на высоте 125. надеюсь вы поняли.)
Там в вопросе я написал, что мне нужно просто перенастроить эту параболу таким образом, чтобы она не фиксировала высоту юнита, а прибавляла/убавляла, не перебивая собой другие изменения высоты(например, если подкинуть этого же юнита повторно этой функцией). Полагаю, что это всё таки возможно, но там vJass структура+муи, а с моими гуишными знаниями жасса, я боюсь даже пробовать там что то менять)
Вот смотри берем снаряд и цель
Автор оригинала - moyack
Автор оптимизированного варианта - Shadow Daemon
h - максимальная высота в прыжке на середине расстояния (x = d / 2),
d - общее расстояние до цели,
x - расстояние от исходной цели до точки, где следует взять высоту по параболе.
library ParabolicMovement2
return (2*(y0 + y1 - 2*h)*(x/d - 1) + (y1 - y0))*(x/d) + y0
endfunction
Вариант Shadow Daemon
h - максимальная высота в прыжке,
d - общее расстояние до цели,
x - расстояние от исходной цели до точки, где следует взять высоту по параболе.
library ParabolicMovement2
return ((4 * h / d) * (d - x) + y1 - y0) * (x / d) + y0
endfunction
Отредактирован Darknessay
А теперь встрой это в ту муишную структуру, пожалуйста, так чтобы всё работало... х)
На всякий случай, повторю вопрос еще более конкретно:
Нужно чтобы парабола не фиксировала высоту вообще никак. Вообще никак. Вообще никак.
Только плюс высота / минус высота.
Т.е. получается должно быть что то типа такого:
d=расстояние АБ
h=макс. высота дуги
r=(h/(d/spd)/blabla_formula)
r2=(d/blabla_formula)
А потом каждый тик таймера:
Высота юнита +r
r-r2
Ну и в итоге должно получиться, что высота юнита прибавляется на R каждый тик, а сам R уменьшается, и при достижении середины пути, R будет равен нулю, а дальше - отрицательный, так чтобы юнит снижался.
Короче, я в принципе шарю как это сделать, но я не шарю в муишной структуре - это беда...
Отредактирован MpW
Darknessay, радиус очень сложно вычислить. Это тебе не окружность или сфера, где идеально круглое. там что вроде овала, эллипса. мб есть какие-то способы, но чтобы сделать = надо знать математику хорошо (там геометрия, тригонометрия, матрица и др)
*человек, рисовавший голых баб на всех уроках, начиная с первого класса*
Я не понимаю этих сложных слов, но щас покажу это умному братишке, чтобы он попытался обьяснить :D
Спасибо тебе за труды. Возвращение там никакое не нужно, полет снаряда в один конец
Отредактирован MpW
wayMax - максимальная точка (ставите нужный размер длины дуги)
wayMin и wayMax образуют отрезок (длину дуги)
wayNow - текущее положение точки
resultMin - минимальная высота
resultMax - максимальная высота
карта