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

объяснение
если ты читал статью, то знаешь имеешь представление о том, что такое локальная переменная и в чем разница между глобальной переменной. И область их применения.
Kolya12, вот допустим есть два одинаковых юнитов с одинаковыми абилками. Один юнит принадлежит тебе, второй другому игроку. Ты применяешь скилл, который вешает эффект на 15 секунд. После чего должен удалиться эффект. Эффект нужно где-то сохранить, верно? И юнита, на которого повесили эффект, также нужно сохранить. Проще говоря нужны ссылки. нужно на что-то ссылать. Все переменные - это ссылки на объекты. Так вот, если вдруг другой игрок в это время возьмет и применит скилл, и перезапишет глобалки на юнита, и на эффект. Чтобы этого не было существуют локалки.
На самом деле локалки действуют внутри функции, это их недостаток (в гуи вообще не применимо, там часто будет вызов других функции). Внутри функции можно только с вэйтами поиграть. работает норм. Но, если вызвать отдельную функцию локалки не помогут, нужно с помощью глобалок переносить на другие функции или использовать аргументы функции. Ты берешь ссылку юнита и переносишь на другой триггер, где периодично что-то делает с ней (возможно там где-то по случайности переписали ее).
Есть проблема во времени, если будет задержка, то глобалки можно перезапить за это время. И в игре нарушится все. Нормально локалки работают с вэйтами внутри функции. Но, если хочется сделать что-то большое, например, каждую секунду наносить урон от лица юнита. То тут нужен таймер или триггер с периодичным таймером. Тут локалки не помогут. И кстати вэйт работает дольше указанного.
Если взять и создать несколько юнитов, и попробовать взять всех их заставить запустить одновременно одну способность. То тут выяснится, что триггер не выполняет параллельно, а последовательно. Можно проверить дебагом. Короче триггер выполняет поочередно, и мгновенное, если нет никаких временных задержек между ними. Может быть и есть исключение, но не проверял (например на ExecuteFunc). Проще говоря, локи не обязательны, не понятно зачем они нужны (но мне они нужны для удобства, еще плюсы в них есть), можно всю игру юзать глобалки (темповые глобалки, короче временные ссылки). На самом деле нужно посмотреть как используют МУИ (там используют массивы, для каждого потока можно создавать свой массив, например есть счетчик потока GetTriggerExecCount xgm.guru/p/wc3/184282 или использовать переменную в качестве счетчика).
Допустим, если два юнита запускают одновременно один скилл. Он обработает сначало первый запуск триггера, потом второй запуск. Короче два потока запускает последовательно. Но, если в триггере написано что между частями триггера есть вэйт, то пропустит и запустит следующий поток. То есть, первый поток остановится на паузу из-за вэйта, игра решит не ждать, и запустит следующий поток.
Кстати говоря, аргументы (параметры) функции - это тоже локальные переменные. Где-то прочел.
Представь, идет действие - потом какая задержка во времени (вэйтом или таймером) - затем продолжение триггера. Если во время задержки перезаписали ссылки. то все. Нужно делать так, чтобы не пересекались ссылки между собой. Для этого существует МУИ, хэш-таблица + хэндлы + локалки.
тут просто сложная система у тебя, так нагорожена и запутано. Я убрал лишнее и написал на jass. косяк в том, что между триггерами Jump и JumpFlyLoop есть ссылка (переменная), которую, видимо, перезаписывают. Также повторное использование другим юнитом перезапишет в Jump еще раз. Твои триггеры сложно было читать, все эти манипуляции локалками-глобалки, и наоборот, только путают. Где то в этих манипуляциях ты ошибся, раз не хотят опускать на землю. По логике их должно опустить после опр. времени (это после вэйта в Jump). Посмотрел бы как делаются прыжки на сайте. на хайве. Хотел недавно найти прыжок самурая-орка, когда в прыжке анимацию проигрывает, и показывает. что рубит сверху. Красиво сделано. Но не нашел (придеться самому делать), все время попадаются уродливые прыжки, особенно как у тебя (извини не хотел обидеть, просто прыжок не выглядит настоящим, реальным). гуи и муи много попадались.
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
12
7 лет назад
Отредактирован Kolya12
0
Серавно карта не проверяется.Обновил скрин и карту. Сделал как сказал, объявил локалки первыми и в обоих триггерах.
-почему локалки не обнуляем? Не знаю как. set Caster=null , так обнулять?
0
26
7 лет назад
0
если используете жнгп, кириллица до карты и/или редактора?
0
27
7 лет назад
Отредактирован MpW
0
жалуется редактор на JumpSecPoint, неправильно написали где-то название переменной вот и ошибка. То есть такая переменная не существует и игра не распознает ее. Подсказка: ошибка в триггере JumpFlyLoop
убрал эту переменную, теперь указывается ошибку на другую строчку. Убрал, на еще одну. где-то с третьей попытки запустилось
р
Загруженные файлы
0
12
7 лет назад
0
Когда используют способность одновременно более одного юнита,то все кроме одного повисают в воздухе.Обновил скрин и карту.
0
26
7 лет назад
0
Kolya12:
Когда используют способность одновременно более одного юнита,то все кроме одного повисают в воздухе.Обновил скрин и карту.
встречный вопрос - а почему собственно не должны? у вас нету мульти применения, только для одного юнита
0
12
7 лет назад
Отредактирован Kolya12
0
Я засунул юнита который применил способность в локалку, следовательно остальные действия совершаю именно с ней. Не понимаю в чем косяк.
1
27
7 лет назад
Отредактирован MpW
1
объяснение
если ты читал статью, то знаешь имеешь представление о том, что такое локальная переменная и в чем разница между глобальной переменной. И область их применения.
Kolya12, вот допустим есть два одинаковых юнитов с одинаковыми абилками. Один юнит принадлежит тебе, второй другому игроку. Ты применяешь скилл, который вешает эффект на 15 секунд. После чего должен удалиться эффект. Эффект нужно где-то сохранить, верно? И юнита, на которого повесили эффект, также нужно сохранить. Проще говоря нужны ссылки. нужно на что-то ссылать. Все переменные - это ссылки на объекты. Так вот, если вдруг другой игрок в это время возьмет и применит скилл, и перезапишет глобалки на юнита, и на эффект. Чтобы этого не было существуют локалки.
На самом деле локалки действуют внутри функции, это их недостаток (в гуи вообще не применимо, там часто будет вызов других функции). Внутри функции можно только с вэйтами поиграть. работает норм. Но, если вызвать отдельную функцию локалки не помогут, нужно с помощью глобалок переносить на другие функции или использовать аргументы функции. Ты берешь ссылку юнита и переносишь на другой триггер, где периодично что-то делает с ней (возможно там где-то по случайности переписали ее).
Есть проблема во времени, если будет задержка, то глобалки можно перезапить за это время. И в игре нарушится все. Нормально локалки работают с вэйтами внутри функции. Но, если хочется сделать что-то большое, например, каждую секунду наносить урон от лица юнита. То тут нужен таймер или триггер с периодичным таймером. Тут локалки не помогут. И кстати вэйт работает дольше указанного.
Если взять и создать несколько юнитов, и попробовать взять всех их заставить запустить одновременно одну способность. То тут выяснится, что триггер не выполняет параллельно, а последовательно. Можно проверить дебагом. Короче триггер выполняет поочередно, и мгновенное, если нет никаких временных задержек между ними. Может быть и есть исключение, но не проверял (например на ExecuteFunc). Проще говоря, локи не обязательны, не понятно зачем они нужны (но мне они нужны для удобства, еще плюсы в них есть), можно всю игру юзать глобалки (темповые глобалки, короче временные ссылки). На самом деле нужно посмотреть как используют МУИ (там используют массивы, для каждого потока можно создавать свой массив, например есть счетчик потока GetTriggerExecCount xgm.guru/p/wc3/184282 или использовать переменную в качестве счетчика).
Допустим, если два юнита запускают одновременно один скилл. Он обработает сначало первый запуск триггера, потом второй запуск. Короче два потока запускает последовательно. Но, если в триггере написано что между частями триггера есть вэйт, то пропустит и запустит следующий поток. То есть, первый поток остановится на паузу из-за вэйта, игра решит не ждать, и запустит следующий поток.
Кстати говоря, аргументы (параметры) функции - это тоже локальные переменные. Где-то прочел.
Представь, идет действие - потом какая задержка во времени (вэйтом или таймером) - затем продолжение триггера. Если во время задержки перезаписали ссылки. то все. Нужно делать так, чтобы не пересекались ссылки между собой. Для этого существует МУИ, хэш-таблица + хэндлы + локалки.
тут просто сложная система у тебя, так нагорожена и запутано. Я убрал лишнее и написал на jass. косяк в том, что между триггерами Jump и JumpFlyLoop есть ссылка (переменная), которую, видимо, перезаписывают. Также повторное использование другим юнитом перезапишет в Jump еще раз. Твои триггеры сложно было читать, все эти манипуляции локалками-глобалки, и наоборот, только путают. Где то в этих манипуляциях ты ошибся, раз не хотят опускать на землю. По логике их должно опустить после опр. времени (это после вэйта в Jump). Посмотрел бы как делаются прыжки на сайте. на хайве. Хотел недавно найти прыжок самурая-орка, когда в прыжке анимацию проигрывает, и показывает. что рубит сверху. Красиво сделано. Но не нашел (придеться самому делать), все время попадаются уродливые прыжки, особенно как у тебя (извини не хотел обидеть, просто прыжок не выглядит настоящим, реальным). гуи и муи много попадались.
Загруженные файлы
Принятый ответ
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.