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

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

Ответ
 
FatalBlade

offline
Опыт: 7,398
Активность:
Rect vs Region - отдельные хэндлы или тот же самый?
И так. Событие Юнит входит в ранее триггерно созданную область Rectangle:
((код Jass
function TriggerRegisterEnterRectSimple takes trigger trig, rect Rectangle returns event
local region rectRegion = CreateRegion()
call RegionAddRect(rectRegion, Rectangle )
return TriggerRegisterEnterRegion(trig, rectRegion, null)
endfunction
))
Ясно что для регистрации события на данную область Rectangle, создаётся переменная типа Region - rectRegion, создаётся новый хэндл. Но ведь существующий ранее Rect тоже является хэндлом. Мне конечно очень интересно, зачем близзарды так накрутили, что получилось что создаются 2 хэндла на 1 область, но не в этом суть темы. Раз уж мы получаем 2 хэндла, событие регистрируется на созданный Регион rectRegion, и этот регион не будет никуда двигаться по ходу игры... то почему бы не удалить 1 из хэндлов, а именно Rect под название Rectangle? Ведь он больше не нужен, поскольку используется Регион.
Ваши мнения...
И ещё. Как вычислить саму область в которую зашёл юнит?

Отредактировано FatalBlade, 02.10.2012 в 02:30.
Старый 02.10.2012, 01:46
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
> И ещё. Как вычислить саму область в которую зашёл юнит?

короче проверяешь координаты области по GetTriggerUnit x/y
и массивом перебираешь по бд
Старый 02.10.2012, 02:52
FatalBlade

offline
Опыт: 7,398
Активность:
bee:
и массивом перебираешь по бд
Ок а если массив размером на 480?
Старый 02.10.2012, 03:00
Темак
jass for everyone
offline
Опыт: 7,200
Активность:
FatalBlade:
Rect vs Region - отдельные хэндлы или тот же самый?
отдельные
рект это квадрат (регионы, которые можно добавлять на карту на самом деле - ректы)
регион может включать в себя множество ректов
FatalBlade:
Ок а если массив размером на 480?
для чего тебе нужно столько областей?
Старый 02.10.2012, 04:05
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
и че что массив на 480 шт
главное чтоб бло меньшн 9к точно не помню я пьяный
Старый 02.10.2012, 05:33
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
FatalBlade, чтобы не перебирать массив, используй систему расчёта ячеек, где не производится перебирание всех ячеек на предмет соответствия а математическим путём рассчитывается ячейка искмого обьекта, вроде хештаблицы, или хендл - опр константа (но тут нужно осторожно, могут быть баги)
Старый 02.10.2012, 07:14
FatalBlade

offline
Опыт: 7,398
Активность:
Temak1:
отдельные
рект это квадрат (регионы, которые можно добавлять на карту на самом деле - ректы)
регион может включать в себя множество ректов
В данном случае, если я для каждого ректа создаю регион, я могу удалять эти самые ректы?
Temak1:
для чего тебе нужно столько областей?
В этой теме написано. Вот
bee:
главное чтоб бло меньшн 9к точно не помню я пьяный
Производительность карты... Каждый раз при входе юнита в область будут перебираться 480 областей...
quq_CCCP:
вроде хештаблицы
Во что сохранять хэндлы областей? Или что сохранять в хэндлы областей? При реакции на событие Юнит Входит в Область, можно вычислить только входяшего юнита, и всё. Можно вычислить и его координаты, но что это даст? Разве можно по координатам вычислить область в которой они находятся? А что если 2 области накладываются друг на друга.
Старый 02.10.2012, 10:19
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
FatalBlade, а думалка тебе зачем? чтобы ныть на форуме сделайте за меня?
Старый 02.10.2012, 10:45
FatalBlade

offline
Опыт: 7,398
Активность:
quq_CCCP, я не прошу ничего делать за меня. Под-форум создан для того что бы в нём задавали вопросы. На то он и называется Академия: форум для вопросов. А не нравится не отписывайся в моих топиках. И не надо говорить мол юзай поиск итд итп. Большинство вопросов которые я задаю, либо никто не задавал, либо задавали очень редко, да и то не всегда получали на них ответы.

Отредактировано FatalBlade, 02.10.2012 в 11:03.
Старый 02.10.2012, 10:48
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
FatalBlade, реакция а на события, а какие события происходят с регионом, вошёл то юнит а не регион...
Старый 02.10.2012, 11:00
FatalBlade

offline
Опыт: 7,398
Активность:
На регион вообще нету никаких событий, но функция GetTriggerRegion() то есть. Во общем щас попробую.
Старый 02.10.2012, 11:06
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Кстати, есть же такая функция принадлежит ли точка ректу или нет...
Старый 02.10.2012, 11:06
FatalBlade

offline
Опыт: 7,398
Активность:
Всё, с этим разобрался. Теперь как вычислить высоту платформы? Дело в том что то что я поднимаю её в редакторе, не меняет её параметр высоты. Я использовал функцию GetDestructableOccluderHeight(dest). У всех платформ неважно на какую высоту я поднял их в редакторе с помощью Ctrl+PageUp, высота равна 0. Я проверил с дебагмесадж.
Старый 02.10.2012, 11:14
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
FatalBlade, а через точку высоту мерить не пробовал?
((код jass
function GetHeigthBJ takes real HX, real HY returns real
return GetLocationZ( Location( HX, XY ) )
endfunction
))
Юзать для определения высоты эту функцию не советую, ввиду не удаления локации
Старый 02.10.2012, 11:35
FatalBlade

offline
Опыт: 7,398
Активность:
О спс работает. quq_CCCP:
Юзать для определения высоты эту функцию не советую, ввиду не удаления локации
Ты о чём? После сохранения параметра Z
set z = LocationZ(loc)
я её спокойно удаляю
call RemoveLocation(loc)
Старый 02.10.2012, 11:48
ScorpioT1000
Работаем
online
Опыт: отключен
не надо ничего удалять, есть специально выделенная локация для данной операции, которая передвигается в то место и берутся координаты
Старый 02.10.2012, 12:02
FatalBlade

offline
Опыт: 7,398
Активность:
ScorpioT1000, ок, но какая разница между создатием и удалением локации, или передвижением одной и той же? Оба варианта работают, оба безутечны. Или есть какая то константная локация, которую даже создавать не придётся?
Старый 02.10.2012, 12:06
adic3x

offline
Опыт: 108,439
Активность:
ок, но какая разница между создатием и удалением локации, или передвижением одной и той же?
Перемещение заметно быстрее. Это не важно, если у Вам надо просто проверить высоту одной точки, но при расчете движения, когда движутся одновременной десятки объектов, и проверять высоту точки надо каждые 0.025 секунды это хорошая, уместная оптимизация.
Старый 02.10.2012, 14:28
ScorpioT1000
Работаем
online
Опыт: отключен
Или есть какая то константная локация, которую даже создавать не придётся?
есть, не константная
location bj_meleeNearestMineToLoc = null
Старый 02.10.2012, 14:51
FatalBlade

offline
Опыт: 7,398
Активность:
ADOLF:
проверять высоту точки надо каждые 0.025 секунды
Это ты уже загнул. 0.04 хватает "для человеческого глаза".
Старый 05.10.2012, 01:37
Ответ

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

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

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

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



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