Спелл, который будет временно удваивать любое постепенное движение юнита (обычную ходьбу, толчки чем-то типа форстаффа и т. п. будут двигать его вдвое дальше).
Будет таймер с малым периодом.
Будет запоминать X и Y юнита и возвращать их определенный период.
Будут такие переменные:
u5 - юнит, доставаться из хэндла
x2 - возвращенная СТАРАЯ координата юнита X из хэндла
y2 - возвращенная СТАРАЯ координата юнита Y из хэндла
local real x = GetUnitX(u5)
local real y = GetUnitY(u5)
local real x3
local real y3
УДВОЕНИЕ ПОСТЕПЕННОГО СДВИЖЕНИЯ
...
УДВОЕНИЕ ПОСТЕПЕННОГО СДВИЖЕНИЯ - закрыто.
Вместо ... нужен код, который бы подсчитывал дистанцию между старыми координатами юнита и новыми и, если она больше 0, но меньше 200, определял вдвое дальше от дистанции в направлении сдвига новые координаты x3 и y3 сдвигал юнита на вдвое дальше в том же направлении. x3 и y3 для этих новых координат и нужны, на них юнит и должен попасть.
Потом в любом случае текущие координаты X и Y юнита, было сдвижение или нет, будут записываться в хэндл обратно и возвращаться как x2 и y2, и все по новой до завершения действия спелла. Все остальное я там самостоятельно сделаю.
Прошу помочь с написанием кода вместо ..., все необходимые переменные приведены выше, т. к. трудности, с точками не так давно работаю.

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

Это как без корня?
dx = x - x2
dy = y - y2
d2 = dx * dx + dy * dy
if (d2 < 40000) {
    x3 = x + dx
    y3 = y + dy
}

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
21
7 лет назад
0
Уточняю - я могу там самостоятельно определить точки по полярным координатам, x и y точек и сдвинуть, как надо. Но это рак, т. к. лишние переменные, их обнуление и значительное из-за малого периода таймера снижения производительности. Я понимаю, что в идеале тут нужны x и y без точек, но вот затрудняюсь в таком случае определить направление и подсчитать дистанцию сдвижения.
2
29
7 лет назад
Отредактирован Doc
2
dx = x - x2
dy = y - y2
d = SquareRoot(dx * dx + dy * dy)
if (d < 200) {
    x3 = x + dx
    y3 = y + dy
}
Если вы у мамы оптимизаторы можно обойтись без sqrt.
Я не очень понял что имеется в виду под вдвое дальше но если дистанцию нужно увеличить в 2 раза то
dx = x - x2
dy = y - y2
d = SquareRoot(dx * dx + dy * dy)
if (d > 0.001 && d < 200) {
    dx = dx / d
    dy = dy / d
    d = d * 2

    x3 = x + dx * d
    y3 = y + dy * d
}
Напомню только что сразу после этого в хендл нужно записать именно новые координаты.
0
21
7 лет назад
0
^ Вроде понятно, потом посмотрим на деле.
dx и dy и d это реалками же тоже объявить в начале, просто уточняю?
0
29
7 лет назад
0
Реалками
0
30
7 лет назад
Отредактирован Clamp
0
код, который бы подсчитывал дистанцию между старыми координатами юнита и новыми
Немного поизображаю DioD'а:
Теорема_Пифагора.

открыть после прочтения
Вообще, теорема Пифагора очень полезная штука, можно в любой мерности находить расстояния.
    float M_Distance(float x1, float y1, float z1, float x2, float y2, float z2) {
        float deltaX = x1 - x2
        float deltaY = y1 - y2
        float deltaZ = z1 - z2
        return SquareRoot(Pow(deltaX, 2) + Pow(deltaY, 2) + Pow(deltaZ, 2))
    }
Ещё советую почитать: Теорема_синусов.
Этот комментарий удален
0
14
7 лет назад
0
Если вы у мамы оптимизаторы можно обойтись без sqrt.
Ето как без корня?
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.