Нашёл описание как убрать утечку полярных координат. Через Custom Script определяются переменные (которые Я определил без Custom Script-а), и опытным путём (менял на стандартную функцию) удалось установить что главная строчка не работает, всё остальное работает и это не нужно здесь приводить. Копирую вам прямо из Custom Script-а, как есть:
call MoveLocation(udg_GlobalCurrentPoint1, GetLocationX(udg_GlobalCurrentPoint1) + udg_GlobalCurrentReal1 * CosBJ(udg_GlobalCurrentAngle), GetLocationY(udg_GlobalCurrentPoint1) + udg_GlobalCurrentReal1 * SinBJ(udg_GlobalCurrentAngle))
Принятый ответ
Сделал так. Использую только MoveLocation..., можно даже вообще не удалять переменную точки а лишь двигать её, как курсор мыши, и указывать молниеносно и невидимо для всех триггеров одной точкой что и куда им делать. Все стрелы полетели как надо, в россыпь. Хотя когда Я делаю удаление точки в конце, это не отражается на следующем вызове триггера, так что можно и удалять, главное не удалять когда она ещё нужна до завершения триггера. Проверил на Хендлах, один Хендл создаётся один раз, чтобы объявить эту точку, а то что двигаю в цикле никак не прибавляет Хендлы. Получилась точка-указатель, как курсор мыши, и одной хватает, ведь Warcraft однопоточный. Оставлю ещё вопрос открытым на несколько часов, может Я не прав и кто-то меня поправит.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
И вот правда стоило так извращаться?
Отредактирован Maniac_91
quq_CCCP, Проверил сейчас и то и то заклинание, всё работает. В одном Random Angle, в другом функция AngleBetweenPoints, но разницы никакой, работает чёрт возьми! Значит логически ты уже не прав. Причём когда работало с утечками, были заметные торможения, а теперь всё гладко, без лагов. Крутил камеру прямо на ходу, всё норм. Но по счётчику Хендлов сейчас сказать трудно, там и другие утечки идут... Думаю решено.
Hate, Сорри, допустил маленькую ошибочку, 1 хендл прибавляется!
Финальный разбор показал. Функция Преобразование координат = 1 хендл, функция Полярный координат = 1 хендл, функция MoveLocation = 0 хендлов. Ну что ж, придётся признать что хендлы всё таки делаются, что ж тут поделать. Сегодня Я устал, завтра продолжу...
Весь этот дроч на оптимизацию, прямой код и устранение каждой утечки переоценен в вк3. В первую очередь геймплей продумай
Кстати вот - ссылка
Почитай на досуге, там объясняется что к чему.
quq_CCCP, написал снова, снова произошёл вылет, причём когда Я ещё в редакторе писал. Понял что строка слишком длинная, слишком длинные названия переменных, но это мой стиль. Написал в две строки. Написал - "set udg_GlobalCurrentAngle = (udg_GlobalCurrentAngle * bj_DEGTORAD)". Не работает!
Hate, Вот как Я удаляю точку после каждого прохода! Чтобы надёжно было... Потом объявляю заново переменную. А как иначе?
Всё. Убрал полностью удаление точки. Включил снова MoveLocation... - не работает. Сижу ломаю голову дальше...
И вдогонку вопрос, как написать в MoveLocation... координаты центра карты, чтобы объявить в начале инициализации карты как стартовую точку?