Помогите понять в чем проблема, пожалуйста -.-
Снаряд создается с небольшим смещением от героя(правее или левее) и летит по дуге в точку каста.
Смещение = 45 либо -45(рандомно), это же и поворот снаряда исходный.
По формуле мана снаряда устанавливается как = значение, которое должно вычитаться от его текущего поворота, чтобы он собственно летел по дуге, поворачиваясь.
Так вот, почему то финальный угол, который должен быть равен +-90(типа полный поворот снаряда к концу пути = дуга), в итоге равняется 115(где то при 1000 расстояния), а сам снаряд, кажется, долетает расстояние до точки каста, но не формирует полную дугу - чем дальше точка каста. Т.е. он умирает левее или правее точки каста(на глаз, где то на 250-500 от точки каста, при расстоянии в 2000).
Я думаю дело в неверных расчетах с 3.14, но что не так?
Запуск:
Движение(каждые 0.03):

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

Кстати можно двигать так:
скрины формулы
пример с топорами
движение по эллипсу, Rx и Ry отличаются
есть еще формулы по ссылке и ссылке но здесь больше сложностей
есть форму скорпа
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 - максимальная высота
карта
еще есть бросок Tiny из доты и бросок из Пуджа Варс (надыбил на форуме). Код очень отличается от типичной параболы у нас на сайте в алгоритмах, там за основу счетчик берется. Мне понравился бросок из Пуджа Варс. Все эти примеры скинул в карту Только в наработке с Toss Tinny, которую скинул, есть небольшая накладка, там у него два скила (спешил и не посмотрел), и нужно поменять id-приказ у канала, тогда будет все ок (не знаю, почему дал ему вторую, мне казалось крута сравнить, щас не кажется)

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
19
6 лет назад
Отредактирован Darknessay
0
Clamp:
Почему ты называешь вектора углами?
Потому что в варе это называется "угол поворота"(facing angle) - поворот юнита(лицом) в направлени 0-360 градусов.
Я не силен в терминологии. Вектор = направление, верно?

Вы не могли бы еще сюда заглянуть, ребят?
Я подожду разбор кода топоров от Steal Nerves, но пока что забил и кидаю снаряд по прямой+парабола.
Если у меня получится потом раздуплиться в топорах - сделаю дугу, но это мой загон, не принципиально, а вот момент в вопросе выше - вполне себе важная штука(например, герой должен разбрасывать кольцом вокруг себя 8 снарядов, каждый снаряд должен лететь от героя по параболе(типа он их подкинул ,а потом они падают). их исх. высота = 125, и эту высоту я сниму дополнительным таймером, пока они будут лететь, но эта парабола фиксирует высоту и снаряды сразу перемещаются в Z=0.00, а потом от 0 делают свою параболу - ну, а нужно чтобы они стартовали у него над головой, на высоте 125. надеюсь вы поняли.)
Там в вопросе я написал, что мне нужно просто перенастроить эту параболу таким образом, чтобы она не фиксировала высоту юнита, а прибавляла/убавляла, не перебивая собой другие изменения высоты(например, если подкинуть этого же юнита повторно этой функцией). Полагаю, что это всё таки возможно, но там vJass структура+муи, а с моими гуишными знаниями жасса, я боюсь даже пробовать там что то менять)
0
23
6 лет назад
0
чем не угодил узнать растоянии снаряда и цели а также узнать высота снаряда и цели вот 2 параметр который поможет вернуть цель красиво после какого направении скинеш....
Вот смотри берем снаряд и цель
раскрыть
» Формула параболы (учитывающая начальную и конечную высоту)
Автор оригинала - moyack
Автор оптимизированного варианта - Shadow Daemon
h - максимальная высота в прыжке на середине расстояния (x = d / 2),
d - общее расстояние до цели,
x - расстояние от исходной цели до точки, где следует взять высоту по параболе.
library ParabolicMovement2
function ParabolaZ2 takes real y0, real y1, real h, real d, real x returns real
return (2*(y0 + y1 - 2*h)*(x/d - 1) + (y1 - y0))*(x/d) + y0
endfunction
endlibrary
Вариант Shadow Daemon
h - максимальная высота в прыжке,
d - общее расстояние до цели,
x - расстояние от исходной цели до точки, где следует взять высоту по параболе.
library ParabolicMovement2
function ParabolaZ2 takes real y0, real y1, real h, real d, real x returns real
return ((4 * h / d) * (d - x) + y1 - y0) * (x / d) + y0
endfunction
endlibrary
0
19
6 лет назад
Отредактирован Darknessay
0
pro100master:
А теперь встрой это в ту муишную структуру, пожалуйста, так чтобы всё работало... х)
На всякий случай, повторю вопрос еще более конкретно:
Нужно чтобы парабола не фиксировала высоту вообще никак. Вообще никак. Вообще никак.
Только плюс высота / минус высота.
Т.е. получается должно быть что то типа такого:
d=расстояние АБ
h=макс. высота дуги
r=(h/(d/spd)/blabla_formula)
r2=(d/blabla_formula)
А потом каждый тик таймера:
Высота юнита +r
r-r2
Ну и в итоге должно получиться, что высота юнита прибавляется на R каждый тик, а сам R уменьшается, и при достижении середины пути, R будет равен нулю, а дальше - отрицательный, так чтобы юнит снижался.
Короче, я в принципе шарю как это сделать, но я не шарю в муишной структуре - это беда...
0
27
6 лет назад
Отредактирован MpW
0
вот примеры. Ничего нового в них нет. Один пример - код из доты про рексара с топорами, и второй по параболе (там подумал еще и поднимать, и двигать в бок), единственное, что не написал возвращение. Просто лень было.
Darknessay, радиус очень сложно вычислить. Это тебе не окружность или сфера, где идеально круглое. там что вроде овала, эллипса. мб есть какие-то способы, но чтобы сделать = надо знать математику хорошо (там геометрия, тригонометрия, матрица и др)
раскрыть
радиус можно выяснить по теореме пифагора. Помнишь прямоугольный треугольник. Там есть два катета, и гипотенуза (гипотенуза это и есть радиус). горизонтальный катет = d/2, вертикальный катет = h. И там ищи по теореме пифагора. Зная, значения двух катетов, можно еще и узнать и угол (если он нужен).
Загруженные файлы
0
19
6 лет назад
0
Steal nerves:
*человек, рисовавший голых баб на всех уроках, начиная с первого класса*
Я не понимаю этих сложных слов, но щас покажу это умному братишке, чтобы он попытался обьяснить :D
Спасибо тебе за труды. Возвращение там никакое не нужно, полет снаряда в один конец
5
27
6 лет назад
Отредактирован MpW
5
Кстати можно двигать так:
скрины формулы
пример с топорами
движение по эллипсу, Rx и Ry отличаются
есть еще формулы по ссылке и ссылке но здесь больше сложностей
есть форму скорпа
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 - максимальная высота
карта
еще есть бросок Tiny из доты и бросок из Пуджа Варс (надыбил на форуме). Код очень отличается от типичной параболы у нас на сайте в алгоритмах, там за основу счетчик берется. Мне понравился бросок из Пуджа Варс. Все эти примеры скинул в карту Только в наработке с Toss Tinny, которую скинул, есть небольшая накладка, там у него два скила (спешил и не посмотрел), и нужно поменять id-приказ у канала, тогда будет все ок (не знаю, почему дал ему вторую, мне казалось крута сравнить, щас не кажется)
Принятый ответ
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.