Добавлен
Как плавно повышать или понижать высоту dummy с точки A к точке B
        x = GetUnitX(цель) - GetUnitX(P_a.dummy);
        y = GetUnitY(цель) - GetUnitY(P_a.dummy);
        z = GetUnitZ(цель) - GetUnitZ(P_a.dummy);
        r = SquareRoot(x*x + y*y + z*z)
так я узнаю дистанцию между точками (юнитами)
потом двигаю
            a = RADTODEG * Atan2(GetUnitY(P_a.at2) - GetUnitY(P_a.dummy), GetUnitX(P_a.at2) -
           GetUnitX(P_a.dummy))
            //поворот дамика 
            SetUnitFacingTimed(P_a.dummy, a, 0)
            //координаты
            x = GetUnitX(P_a.dummy);
            y = GetUnitY(P_a.dummy);
            z = GetUnitZ(P_a.dummy);

           //смещение 
            x = x + move_cord * Cos(DEGTORAD * a);
            y = y + move_cord * Sin(DEGTORAD * a);
           //z = ???             как работать с высотой ?

            SetUnitX(P_a.dummy, x);
            SetUnitY(P_a.dummy, y);
            SetUnitZ(P_a.dummy, z);

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

Посмотри в этой карте, там есть полёт гранаты. Запусти карту и посмотри, как выглядит этот полёт гранаты, в игре нажми G, чтоб кинуть её. Потом открываешь карту, заходишь в триггеры, открываешь папку Shoot, в которой есть триггер Grenades и смотришь, как сделали этот полёт гранаты.
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
19
6 лет назад
0
Похожие вопросы:

ответ
возвращает то же значение Z, что было до деформации.
Вообще-то нет, иначе в Sniper Aren-у было бы невозможно играть.
Скорее всего ты создаёшь "временную" а не "постоянную" деформацию. По завершению постоянной деформации он выдаёт точные данные (деформация длится в течение времени, указанного в триггере)
Если надо делать деформацию на время, то лучше заносить точки в переменные и в нужный момент делать обратную деформацию, возвращающую первоначальное состояние.
ответ
Kinade, изучай на здоровье
ответ
Всё, разобрался, вопрос снимаю)

0
32
6 лет назад
0
SetUnitFlyHeght
0
7
6 лет назад
0
SetUnitFlyHeght == SetUnitZ
я знаю как утсновить высоту
мне надо чтобы снаряд повышеал или понижал высоту плавно пока летит к цели
0
22
6 лет назад
0
SetUnitFlyingHeight или что-то в этом роде. Для работы нужно добавить способность Превращение в ворона к юниту которому нужно изменить Z.
Всё это описано в следующей статье: xgm.guru/p/wc3/spellmaker-stomp-spell-creation
Кстати, функции GetUnitZ нет в стандартной библиотеке.
Sergey105,
Sergey105:
SetUnitFlyHeght == SetUnitZ
я знаю как утсновить высоту
мне надо чтобы снаряд повышеал или понижал высоту плавно пока летит к цели
Таймер.
0
7
6 лет назад
Отредактирован N7 Molot
0
Zahanc, кстате чтобы ты знал я знаю как изменить высоту а GetUnitZ() я сам добавил для удобства
private void RangeAttack(){
        ProcessingAttack P_a = GetStoredInteger(gc, "Attack", I2S(GetHandleId(GetExpiredTimer())))
        float x = 0x00, y = 0x00, z = 0x00, r = 0x00, a = 0x00;
        float z1 = 0x00;
        
//===================== Узнаем дистанцию до цели ======================================================== 
        x = GetUnitX(P_a.at2) - GetUnitX(P_a.dummy);
        y = GetUnitY(P_a.at2) - GetUnitY(P_a.dummy);
        z = GetUnitZ(P_a.at2) - GetUnitZ(P_a.dummy);
        r = SquareRoot(x*x + y*y + z*z)
        
        BJDebugMsg(R2S(RAbsBJ(Atan2(z, r))))
//=======================================================================================================
        if (r > move_cord ) { //если дистанция r больше 1 то двигаем дамика
            // определяем угол поворота
            a = RADTODEG * Atan2(GetUnitY(P_a.at2) - GetUnitY(P_a.dummy), GetUnitX(P_a.at2) - GetUnitX(P_a.dummy))
            // поворачивем дамика под углом a
            SetUnitFacingTimed(P_a.dummy, a, 0)
            // сдвигаем координаты 
            x = GetUnitX(P_a.dummy);
            y = GetUnitY(P_a.dummy);
            z = GetUnitZ(P_a.dummy);
            
            z1 = GetUnitZ(P_a.at2);
            
            if (r > P_a.radius_attack/2) {
                //z = z 
            }
            
            x = x + move_cord * Cos(DEGTORAD * a);
            y = y + move_cord * Sin(DEGTORAD * a);
            //z = ???
            
            // двигаем дамика по  координатам
            SetUnitX(P_a.dummy, x);
            SetUnitY(P_a.dummy, y);
            SetUnitZ(P_a.dummy, z);
        } else { // когда дистанция уже меньше или равно 10
            SetHp(P_a.at2, GetHp(P_a.at2) - 100 )
            RemoveUnit(P_a.dummy) // удаляем дамика
            DestroyEffect(P_a.ef_dummy);
            DestroyTimer(P_a.ex_t)          // удаляем таймер
            FlushStoredInteger(gc, "Attack", I2S(GetHandleId(P_a.ex_t))) //чистим кеш
            P_a.ex_t = null  // обнуляем переменную
            P_a.destroy() //уничтожаем структуру
        }
        ////////////////////
    }
это для не понтяных уже
Zahanc, ясно что таймером я и двигаю таймером тут без него не как
0
22
6 лет назад
0
Если нужно чтобы снаряд вёл себя как homing missile, то советую делать с помощью векторов.
0
7
6 лет назад
0
я не б нем в векторах
и незнаю как
вот и задал впопрос как сделать
у меня высота допустим 50 у моей цели 200 мне надо чтобы высота постепенно повышалась дамика пока она летит к цели и достигла равной высоты цели
ну или понизилась если цель опустилась ниже
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.