Как заменить Wait на Таймер?
Сказали мне что Wait работает нестабильно, при паузе в игре он продолжает отсчитывать. Сказали что нужно ставить Таймеры. Но о каких Таймерах идёт речь? Это какие-то самодельные триггеры, или те Таймеры что в таблице отсчитывают время? Дайте подробности как их нужно правильно делать.

Лучший ответ:
на гуях:
сперва создаем таймеры в редакторе переменных (скажем штук 5 таймеров):
когда нужна задержка, запускаем таймер:
и еще нужен другой триггер, который выполняет действия когда таймер истечет - те что должны быть выполнены после задержки:



Просмотров: 968

XGM Bot #1 - 10 месяцев назад 0
Похожие вопросы:

» ответ
Сама функция TriggerSleepAction (Wait) не вызывает утечек, но багнута и при использовании в качестве задержек может способствовать утечкам, поэтому никаких вейтов в спеллах и всяких респаунах - только таймеры, вейты нужны для синхронизации данных и роликов и точка!

AlexSan #2 - 10 месяцев назад 0
Примерно как-то так
прикреплены файлы
biridius #3 - 10 месяцев назад 0
AlexSan, задержка перед обнулением переменной не нужна, сам таймер никуда от этого не исчезает
локальная переменная обнуляется чтобы не утекала ссылка на объект
GetLocalPlayer #4 - 10 месяцев назад (отредактировано ) 2
В GUI, в меню создания переменных, их тип так и называется "Таймер".
В действиях триггера, это раздел "Обратный отсчет".
Dagger667 #5 - 10 месяцев назад 0
AlexSan, сгодится на крайний случай, но Я работаю на GUI, мне нужно малой кровью сделать.
Не пойму, зачем так извращаться? Есть "Wait", а под ним, тут же, "Wait (game-time)", проверил тщательно, ждал 5 минут в Паузе Игры 30-ти секундную задержку, всё работает. А под ним, ещё, Wait For Condition, Wait For Sound, на любую потребу.
ledoed #6 - 10 месяцев назад 0
используй вайты,таймеры нужны для точности да и для малых периудов то ейть вейты с 0.01 = 0.2 примерно,да и темболее 0.2-1 сек погрешности это пустяк
Dagger667 #7 - 10 месяцев назад 2
вейты с 0.01 = 0.2 примерно,да и темболее 0.2-1 сек погрешности это пустяк
Тогда нет, у меня есть такие важные периоды... Объясни тогда, как правильно написать таймер? Просто создал, не помогло. Тут вечно не договаривают. Скупы на слова. Приходится вытягивать по слову.
biridius #8 - 10 месяцев назад (отредактировано ) 0

на гуях:
сперва создаем таймеры в редакторе переменных (скажем штук 5 таймеров):
когда нужна задержка, запускаем таймер:
и еще нужен другой триггер, который выполняет действия когда таймер истечет - те что должны быть выполнены после задержки:
прикреплены файлы
Dagger667 #9 - 10 месяцев назад 0
и еще нужен другой триггер
У меня есть Wait-ы в цикле Integer, и там очень важное заклинание, которое Я долго делал, которое работает стабильно, всё отлажено... Отказаться жалко. И после каждого прохода цикла идёт проверка условия, изменилось ли значение в булёвой переменной в режиме реального времени. А за тем циклом, идёт другой цикл, и немного вводного и конечного кода, и кругом Wait-ы. И получается, что нельзя триггер прерывать, и переносить в другой триггер тот же самый участок кода. У меня там 120 проходов, и что, на каждое истечение Таймера делать новый триггер с тем же кодом? Это 120 триггеров, и каждый передаёт управление следующему по таймеру? Жаль нет функции "Go To", как это в других языках программирования. Возможно действительно, стоит сделать отдельный триггер как jass-функцию, к которой и нужно обращаться через Custom Script? Но будет ли он обратно переходить на ту точку откуда его вызвали? В Гуях такого нет.
biridius #10 - 10 месяцев назад (отредактировано ) 0
Dagger667, подумай
триггер срабатывает каждый раз когда таймер истекает. тебе не нужно 120 триггеров.
достаточно запустить периодический таймер один раз и будет тебе цикл каждые 0.01 сек. пока не остановишь таймер
стандартный wait game-time это и есть таймер в одну строчку который ты хотел сделать. он именно так и работает, что можно легко подсмотреть в jngp.
сложные спеллы лучше делать на джассе и если поставить jngp, то он легче чем эти гуи для всего кроме триггеров в два действия. ничего сложного там нет. в ЖНГП есть поисковик функций, никаких кодов там учить наизусть не нужно.
Dagger667 #11 - 10 месяцев назад 0
периодический таймер
Ах да, периодический же ещё есть... Значит можно разбить где-то на два-три триггера. Использовать TurnOn и TurnOff, чтобы они зря не мотали, и передавать управление следующему триггеру. У меня там два по 120 в одном триггере, значит два таких триггера хватит. Один отработал, передал другому... Но код мне придётся писать вместе с таймером, верно? То есть это не универсальный таймер, а для какого-то одного триггера? Для другого нужно делать другой таймер?
biridius #12 - 10 месяцев назад (отредактировано ) 0
Dagger667, да, придется разбивать на отдельные триггеры если хочешь задержку меньше 0.1 сек.
На каждый цикл действий свой триггер и свой таймер.
Проблемы с turnon/turnoff будут если спелл использует больше чем один юнит.
Dagger667 #13 - 10 месяцев назад 0
Проблемы с turnon/turnoff будут если спелл использует больше чем один юнит.
Здесь поподробней. Какие меня ждут проблемы и что с этим делать?
На эту тему даже вопрос задавал недавно, никто толком не ответил.
biridius #14 - 10 месяцев назад 0
Dagger667, проблема будет если два юнита используют один и тот же спелл одновременно, так как триггер один и тот же
выключаешь триггер, а тут другой юнит вдруг использует спелл и снова включает триггер. перезаписывает переменные, и т.д., что может повлиять на работу спелла первого юнита, если тот еще не закончил свою работу
Dagger667 #15 - 10 месяцев назад 0
biridius, Хорошо, спасибо. Я учту это когда буду делать.
Hate #16 - 10 месяцев назад 0
Dagger667:
Проблемы с turnon/turnoff будут если спелл использует больше чем один юнит.
Здесь поподробней. Какие меня ждут проблемы и что с этим делать?
На эту тему даже вопрос задавал недавно, никто толком не ответил.
делается через массивы. но надо уметь делать стаки
Dagger667 #17 - 10 месяцев назад 0
но надо уметь делать стаки
Я думаю разберусь самостоятельно. Потому что делал динамические массивы, которые смещали значение и ключ на один назад, когда юнит выбывал из него, или делал контрольную переменную, которая проверяла, не используется ли в это время этот период кода кем-то ещё, и всё на Гуях. Но в любом случае спасибо за поддержку! Побеспокою вновь когда будет что-то действительно сложное!