Помните мой вопрос про детектор урона? Так вот, оказалось что утечка шла не из плавающего текста, а из действия указанного в заголовке. Как устранить эту утечку и насколько она страшна? Скрин функции прилагается.

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

Alexey103:
PT153, Вау, а я не знал. Этот вопрос был создан как раз для того чтоб найти способ избежать утечек из-за добавления события, а не для того чтоб вы писали очевидные вещи. Но пока, альтернативы ни на гуи ни на джасс никто не предоставил.
дык заноси их в группу, если юнит уже в группе то не добавляешь событие
0
32
6 лет назад
0
А зачем тебе плодить ивенты? Это события - юнит получает урон, события никак не удаляются, можно удалить лишь триггер, да и то не в гуи.
Вовсе не надо в гуи делать все что связано с детектом урона, это сложно для уровня гуи и стоит явно переходить на jass.
0
17
6 лет назад
0
quq_CCCP, Ну так тогде помогите мне сделать простую систему отображения урона. Мне всего-то нужно.
Событие (Юнит атакован/получил повреждение)
условие (он находится в области "тренировка")
Действие (Отобразить над головой атакованного юнита полученный урон в виде плавающего текста)
Можно и джасс, только не предлагайте готовые системы на 5000 строчек кода vJass, cJass, которые требуют жнгп, а потом установку особой библиотеки, а потом оказывается что в них не настраиваемые параметры, и ты выкидываешь это гуано из своей карты проклиная того кто тебе это посоветовал. Нужно простое и полезное решение, кто может его дать?
0
15
6 лет назад
0
Alexey103:
quq_CCCP, Ну так тогде помогите мне сделать простую систему отображения урона. Мне всего-то нужно.
Событие (Юнит атакован/получил повреждение)
условие (он находится в области "тренировка")
Действие (Отобразить над головой атакованного юнита полученный урон в виде плавающего текста)
Можно и джасс, только не предлагайте готовые системы на 5000 строчек кода vJass, cJass, которые требуют жнгп, а потом установку особой библиотеки, а потом оказывается что в них не настраиваемые параметры, и ты выкидываешь это гуано из своей карты проклиная того кто тебе это посоветовал. Нужно простое и полезное решение, кто может его дать?
Если тебе нужно простенькое отображение урона в одной области на карте, то можно попробовать сделать в лоб.
По таймеру сохранять значения хп юнитов в области в массив/хэш, считать разницу с предыдущим значением, и если разница больше определенного значения, то делать всплывающией текст.
Этот вариант очень глупый, но как по мне для одной области на карте норм. Но Jass все равно надо будет использовать.
0
17
6 лет назад
0
AlexSan, Таймеры и в гуи есть, ну и мне как бы нужно чтоб система была устойчива к высокой скорости атаки, а тут получается дпс метр. + Я использую манекенных юнитов с бешенной регенерацией здоровья, так что придётся менять и их механику тоже.
0
15
6 лет назад
Отредактирован Cheezie
0
Alexey103:
AlexSan, Таймеры и в гуи есть, ну и мне как бы нужно чтоб система была устойчива к высокой скорости атаки, а тут получается дпс метр. + Я использую манекенных юнитов с бешенной регенерацией здоровья, так что придётся менять и их механику тоже.
Вместо регенерации, можешь просто сделать им много хп, и каждое срабатывание таймера устанавливать хп на 100%. Высокая скорость атаки будет нормально работать если у тебя будет таймер с малым периодном. И вот тут уже нужен JASS что бы оптимизировать все это дело и устранить утечки.
+ таймеры в гуи недостаточно гибкие как по мне.
0
17
6 лет назад
0
AlexSan, Я так понял чтоб применить всю эту фигню нужно будет ещё и добавлять в группу всех юнитов в области? Ну и таймер то один, на одногоюнита, я и так могу задетектить урон, там даже событие есть юнит получает урон.
0
15
6 лет назад
0
Alexey103:
AlexSan, Я так понял чтоб применить всю эту фигню нужно будет ещё и добавлять в группу всех юнитов в области? Ну и таймер то один, на одногоюнита, я и так могу задетектить урон, там даже событие есть юнит получает урон.
Если у тебя детектить урон нужно только по манекенам, то можно упростить немного, но по сути да.
Событие я не предлагаю использовать так как ты говоришь что оно вызывает у тебя утечку, а в таймерах с малым периодом это плохо.
2
28
6 лет назад
Отредактирован PT153
2
Мда.
Триггер Init.
События - Юнит входит в Вся карта.
Условия - Тип юнита равно Манекен.
Действия - Добавить событие в триггер Maneken Боевая единица Вошедший юнит получает урон.
Триггер Maneken.
События - ИХ НЕТ.
Условия - Атакованный юнит находится в области (какая нужна).
Действия - Создать плавающий текст над Атакованный юнит (и прочее).
То, что делаете Вы, будет работать ужасно, так как событие будет добавляться каждый раз, когда юнит атакован, и триггер по созданию текста будет срабатывать столько раз, сколько событий.
Всё это можно сделать на ГУИ.
0
17
6 лет назад
0
PT153, Вау, а я не знал. Этот вопрос был создан как раз для того чтоб найти способ избежать утечек из-за добавления события, а не для того чтоб вы писали очевидные вещи. Но пока, альтернативы ни на гуи ни на джасс никто не предоставил.
0
28
6 лет назад
0
Alexey103, а открыть статьи и почитать сложно?
там есть пример отлова урона на гуи
0
17
6 лет назад
0
nvc123, Не нашел я статей на эту тему, может ты мне ссылку кинешь?
2
21
6 лет назад
2
2
26
6 лет назад
2
Alexey103:
PT153, Вау, а я не знал. Этот вопрос был создан как раз для того чтоб найти способ избежать утечек из-за добавления события, а не для того чтоб вы писали очевидные вещи. Но пока, альтернативы ни на гуи ни на джасс никто не предоставил.
дык заноси их в группу, если юнит уже в группе то не добавляешь событие
Принятый ответ
0
28
6 лет назад
Отредактирован PT153
0
Alexey103:
PT153, Вау, а я не знал. Этот вопрос был создан как раз для того чтоб найти способ избежать утечек из-за добавления события, а не для того чтоб вы писали очевидные вещи. Но пока, альтернативы ни на гуи ни на джасс никто не предоставил.
С чего Вы взяли, что создаётся утечка от добавления события? Об этом много статей, и, насколько мне известно, как только юнит умирает, все события, связанные с ним, удаляются.
Тем более Вам нужно это для всего 1 юнита! О какой утечке вообще речь?
Я указал на ошибку, из-за которой добавляется много одинаковых событий (а следом баги и лаги):
То, что делаете Вы, будет работать ужасно, так как событие будет добавляться каждый раз, когда юнит атакован, и триггер по созданию текста будет срабатывать столько раз, сколько событий.
Hate:
дык заноси их в группу, если юнит уже в группе то не добавляешь событие
Зачем, когда можно сделать так, как я? Юнит только 1 раз входит в область Вся карта. Также можно проверять с помощью CustomData.
0
17
6 лет назад
0
Hate, Невероятно, всё работает. Только не входящий в карту юнит а входящий в особую область. Просто гениально, и ещё раз просто.
0
28
6 лет назад
0
Alexey103:
Hate, Невероятно, всё работает. Только не входящий в карту юнит а входящий в особую область. Просто гениально, и ещё раз просто.
А чем моё решение не устраивает? И в группу добавлять не надо.
0
17
6 лет назад
0
PT153, Мне нужно это не для одного юнита. А для юнитов в области. И я проверил утечки были от того что добавлялись события.
0
28
6 лет назад
Отредактирован PT153
0
Alexey103:
Мне нужно это не для одного юнита. А для юнитов в области. И я проверил утечки были от того что добавлялись события.
Юнит входит в область Вся карта только 1 раз за игру, то есть событие Юнит получает урон добавляется только 1 раз. А в триггере, куда добавляется событие, есть условие (какое Вам нужно), при котором триггер будет срабатывать, как я и написал.
Триггер Init.
События - Юнит входит в Вся карта.
Условия - Тип юнита равно Манекен.
Действия - Добавить событие в триггер Maneken Боевая единица Вошедший юнит получает урон.
Триггер Maneken.
События - ИХ НЕТ.
Условия - Атакованный юнит находится в области (какая нужна).
Действия - Создать плавающий текст над Атакованный юнит (и прочее).
Всегда так делал, всё работало, и никаких утечек нет.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.