XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
senatus
тихий и скромный...
offline
Опыт: 7,023
Активность:
location как параметр функции
... принимается. Нужно ли делать такой точке Remove для избежания утечек?
Или если объявлена как локальной, тогда?
Старый 25.08.2009, 23:57
ToChilo
■□□□□
offline
Опыт: 356
Активность:
Если ты не удалишь точку дествием RemoveLocation(x) то она никуда не дениться
При передачи точки в качества аргумента функции обнулять действием x = null ненужно,
а если ты создашь её локально то нужно.
Старый 26.08.2009, 00:28
agentex

offline
Опыт: 34,534
Активность:
весь вопрос в том как устроены функции вара - если передается ссылка на обьект, то делать ниче с ней не надо, а если копирование обьекта то ремувить..
я думаю что копируются только базовые типы, так что нет поводов для беспокойства
Старый 26.08.2009, 00:31
ScorpioT1000
Работаем
offline
Опыт: отключен
передается хендл, главное чтобы нигде не потерять точку, тогда все норм. если же ты потеряешь все ссылки на нее, тогда удалить уже не получится
Старый 26.08.2009, 01:01
senatus
тихий и скромный...
offline
Опыт: 7,023
Активность:
Типа указателя в с++. Я понял. Но речь не о стандартной функии. А о моей. Допустим, я вычисляю декартово расстояние между двумя точками. Функция принимает две локации ( myFunc( location L1, location L2 ) real ).
Вызываю функцию в таком виде:
myFunc( GetUnitLoc( unit1 ), GetUnitLoc( unit2 ) );
В этом случае, нужно вызывать Ремув в моей функции для параметров? ( по хендлу вроде можно удалить)
Или создавать переменные в вызывающей функции, и делать ремув там помле вызова моей функции?
senatus добавил:
Или когда копия создается?
Если я создам локальную точку, и инициализирую ее как GetUnitLoc( unit1 ). Тогда нужно делать ремув?
Старый 26.08.2009, 02:06
J
expert
offline
Опыт: 48,747
Активность:
senatus, в варе все переменые это указатили, исключение булы инты и реалы
никогда не удаляй точку если она идет параметром функции, это просто некрасиво, да и запутаешься потом, т.е. поставь это себе правилом, чтобы не было такого что ты создаешь точку вертишь ей так и сяк, посылаешь в функцию а потом удаляешь, опа, а она уже была удалена в функции

myFunc( GetUnitLoc( unit1 ), GetUnitLoc( unit2 ) );
local location loc1 = GetUnitLoc(unit1)
local location loc2 = GetUnitLoc(unit2)
call myFunc(loc1 , loc2);
call RemoveLocation(loc1)
call RemoveLocation(loc2)
и вообще забей на точки, их в карте не должно быть вообще, кроме пары случаев, нужно использовать координаты напрямую,почти все функции по работе с точками имеют свои координатные аналоги

я вычисляю декартово расстояние между двумя точками
более правильнее это делать так
function Vec2Len takes real x, real y returns real
    return SquareRoot(x*x+y*y)
endfunction

//--->
local real x1 = GetUnitX(unit1)
local real y1 = GetUnitY(unit1)
local real x2 = GetUnitX(unit2)
local real y2 = GetUnitY(unit2)
local real len = Vec2Len(x2-x1, y2-y1) 
//<---

Отредактировано J, 26.08.2009 в 02:43.
Старый 26.08.2009, 02:32
senatus
тихий и скромный...
offline
Опыт: 7,023
Активность:
О, J, я вот как раз хотел узнать какие нужно удалять, какие нет. Я просто где-то читал, что некоторые стандартные функции после возвратат создают копии, и их нужно удалять. А какие - не знаю. Раз уж ты тут, не поможешь еще 1 вопрос решить?
Кста, спасибо за помощь. Я уже переделал функцию для на получение координат ;)
senatus добавил:
Надеюсь, вопрос можно задать тут же
Вот такая проблема (см. картинку):
В точке а находится кастер. В точке б находится таргет. В в общем,, мне необходимо найти прямоуголник, который выделен, и всех вражеских юнитов отдамажить в этой области. Но не могу найти функцию, которая создает рект или регион, угол наклона сторон которого не равен обязательно 90 градусов. Мне вот угол альфа нужен динамический. Можно создать такой регион, что бы потом пикнуть юнитов в нем? Или нет? Ибо стандартные принимают тока 2 точки, угол там не задается.
Миниатюры
Кликните на картинку для увеличения
Название:  234234.jpg
Просмотров: 29
Размер:  12.9 Кбайт  
Старый 26.08.2009, 02:44
J
expert
offline
Опыт: 48,747
Активность:
Я просто где-то читал, что некоторые стандартные функции после возвратат создают копии
неявно копии не создаются
все нативки принимает точки одни, а возвращает другую, т.е. и те и те нужно удалять, далее все зависит уже от того как построена функций и нативок, если не создаешь копий то их и не будет...

Отредактировано J, 26.08.2009 в 02:57.
Старый 26.08.2009, 02:46
senatus
тихий и скромный...
offline
Опыт: 7,023
Активность:
J, вот и загвозда - как узнать, создает нативка копии, или нет?
Старый 26.08.2009, 02:50
J
expert
offline
Опыт: 48,747
Активность:
senatus:
J, вот и загвозда - как узнать, создает нативка копии, или нет?
J
все нативки принимает точки одни, а возвращает другую, т.е. и те и те нужно удалять
что тут не понятно и кажущееся двусмысленным?

Вот такая проблема (см. картинку):
создай такой регион можно, но он будет не совсем квадратный, регион это набор ректов, и все отсюда вытекающее...
но лучше сделай по другому, берешь группу, проходишься по вектору (a,b) от точки кастера с шагом 150 например, и каждый шаг еще проходишься на такой же вектор повернутый по часовой на 90 градусов
каждый из этих шагов суешь юнитов в небольшом радиусу (200 например) в группу, а после всех шагов делаешь фор по группе а дальше что хочешь...
можно и по другому как-нить, есть много вариантов

Отредактировано J, 26.08.2009 в 03:00.
Старый 26.08.2009, 02:52
senatus
тихий и скромный...
offline
Опыт: 7,023
Активность:
что тут не понятно и кажущееся двусмысленным?
Не понятно что и где удалять =/
создай такой регион можно, но он будет не совсем квадратный
ну, и норм. Там мелочи не интересуют
и каждый шаг еще проходишься на такой же вектор повернутый по часовой на 90 градусов
а это зачем?
каждый из этих шагов суешь юнитов в небольшом радиусу (200 например) в группу
радиус от какой точки?
:: мне вот интересно, как сделано это в волне силы. Или в темной стае... Неужели с такими же заморочками?
Старый 26.08.2009, 03:02
J
expert
offline
Опыт: 48,747
Активность:
senatus
Не понятно что и где удалять =/
вобщем удаляй все то что создаешь
а это зачем?
ты нарисовал квадрат я и подумал что нужен квадрат
ну значит можно без этого
Старый 26.08.2009, 03:11
senatus
тихий и скромный...
offline
Опыт: 7,023
Активность:
нет. Не квадрат, а прямоугольник! Причем, длина отрезка ab динамичная. 2 стороны прямоугольника, параллельные отрезку ab равны ab. А 2 другие стороны, равны константной длине.
В общем, как блин посчитать этот страшный регион?
В темной стае, кстати, вообще конус образуется
Старый 26.08.2009, 03:18
ScorpioT1000
Работаем
offline
Опыт: отключен
всеравно придется создавать его из маленьких радиусов, т.е.
Миниатюры
Кликните на картинку для увеличения
Название:  circles_to_rectangle.PNG
Просмотров: 45
Размер:  8.0 Кбайт  
Старый 26.08.2009, 03:25
senatus
тихий и скромный...
offline
Опыт: 7,023
Активность:
м. ясно. Я подумывал над этим...
А юниты от повторного включения в группу защищены? Или проверять прилется вручную?
Старый 26.08.2009, 03:32
ScorpioT1000
Работаем
offline
Опыт: отключен
все норм должно быть

ScorpioT1000 добавил:
ну у мня напр есть универсальная ф-ция для дамага юнитов в радиусе(специально писал), т.е. мне надо лишь узнать эти 6 точек и применить на них ее :) советую и тебе также делать
Старый 26.08.2009, 03:34
senatus
тихий и скромный...
offline
Опыт: 7,023
Активность:
какие шесть точек?
Центры твоих окружностей? У меня ведь регион разный быть может. И не факт, что шестью точками я обойдусь. Их может быть и больше
Можно вообще функцию глянуть?
senatus добавил:
или имеется в виду вызов функции дамага 6 раз? Это я понял. Разбивать на функции я умею ;)
Старый 26.08.2009, 03:48
ScorpioT1000
Работаем
offline
Опыт: отключен
Цитата:
или имеется в виду вызов функции дамага 6 раз? Это я понял. Разбивать на функции я умею ;)

да. имеется ввиду что есть еще много других способов задамажить эти окружности
Цитата:
И не факт, что шестью точками я обойдусь.

обойдись хоть тысячей, это уже твое дело :)
Старый 26.08.2009, 04:37
senatus
тихий и скромный...
offline
Опыт: 7,023
Активность:
Дадад. Хорошо, товарищи. Спасибо вам.
Старый 26.08.2009, 05:04
agentex

offline
Опыт: 34,534
Активность:
А юниты от повторного включения в группу защищены?
разумеется нет) добавляй пикнутых в другую группу и каждый раз смотри что пикаемых в ней нет
всеравно придется создавать его из маленьких радиусов, т.е.
нет не все равно.. можно спокойно сделать через взаимоисключающиеся углы
Старый 26.08.2009, 13:33
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 03:37.