[Вопрос] Альтернатива TriggerRegisterEnterRectSimple
|
|
Brut@lus | Дата: Суббота, 11 Февраля 2012, 13:31:01 | Сообщение # 1 |
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
| Есть ли альтернатива данному событию, такая, чтобы не нужно было указывать регион. Т.к. из-за этой штуки мне приходится делать 4 триггера вместо одного с ифом.
Сообщение отредактировал Brut@lus - Суббота, 11 Февраля 2012, 14:23:03 |
|
|
|
lawson | Дата: Суббота, 11 Февраля 2012, 13:36:12 | Сообщение # 2 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Brut@lus) Есть ли альтернатива данному событию, такая, чтобы не нужно было указывать регион. Таймер и проверка находится ли юнит в заданных координатах - без триггера, без события.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
Brut@lus | Дата: Суббота, 11 Февраля 2012, 13:39:39 | Сообщение # 3 |
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
| Quote (lawson) в заданных координатах так мне же нужно не чётко в позиции а в квадрате (четырёхугольнике).
|
|
|
|
lawson | Дата: Суббота, 11 Февраля 2012, 13:42:03 | Сообщение # 4 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Brut@lus) так мне же нужно не чётко в позиции а в квадрате RectContainsUnit - примерно так, разкрой БЖ и будет тебе 4х угольник.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
Brut@lus | Дата: Суббота, 11 Февраля 2012, 13:45:26 | Сообщение # 5 |
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
| Там внутри следующая БЖ, а там уже вот что: Code return (GetRectMinX(r) <= x) and (x <= GetRectMaxX(r)) and (GetRectMinY(r) <= y) and (y <= GetRectMaxY(r)) и этого я немного не понимаю 0_оДобавлено (11 Февраль 2012, 13:45:26) --------------------------------------------- TriggerRegisterTimerEventPeriodic утечна ли она бтв?
|
|
|
|
lawson | Дата: Суббота, 11 Февраля 2012, 13:47:32 | Сообщение # 6 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Brut@lus) утечна ли она бтв? Quote (Brut@lus) TriggerRegisterTimerEventPeriodic Это бж, с глобальным триггером - нет
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
Brut@lus | Дата: Суббота, 11 Февраля 2012, 13:50:07 | Сообщение # 7 |
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
| да она содержит в себе return TriggerRegisterTimerEvent(trig, timeout, true)Добавлено (11 Февраль 2012, 13:50:07) --------------------------------------------- не BJ
|
|
|
|
lawson | Дата: Суббота, 11 Февраля 2012, 13:53:22 | Сообщение # 8 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Brut@lus) она содержит в себе Quote (Brut@lus) TriggerRegisterTimerEvent(trig, timeout, true) Добавлено (11 Февраль 2012, 13:53:22) ---------------------------------------------
Quote (Brut@lus) и этого я немного не понимаю Я например использую бж RectContainsCoords, указываю туда глобальную область, и координаты юнита => без утечек.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
Brut@lus | Дата: Суббота, 11 Февраля 2012, 14:00:33 | Сообщение # 9 |
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
| Quote (lawson) Я например использую бж RectContainsCoords, указываю туда глобальную область, и координаты юнита => без утечек. последую твоему примеру.Добавлено (11 Февраль 2012, 14:00:33) --------------------------------------------- Вышла конструкция такого типа: Code function Trig_pickenterPER_Actions takes nothing returns nothing local real lx = GetUnitX(udg_sv) local real ly = GetUnitY(udg_sv)
if ((RectContainsCoords(gg_rct_u1, lx, ly)) == true) then call RemoveUnit( udg_sv ) set udg_sv = null set udg_Hero = udg_h[1] call SetUnitOwner( udg_Hero, Player(0), true ) call SetUnitPositionLoc( udg_Hero, GetRectCenter(gg_rct_start) ) call DisableTrigger( gg_trg_pickenterPER ) endif
endfunction
function InitTrig_pickenterPER takes nothing returns nothing set gg_trg_pickenterPER = CreateTrigger( ) call TriggerRegisterTimerEvent(gg_trg_pickenterPER, 0.4, true) call TriggerAddAction( gg_trg_pickenterPER, function Trig_pickenterPER_Actions ) endfunction
|
|
|
|
Ty3uK | Дата: Суббота, 11 Февраля 2012, 14:02:50 | Сообщение # 10 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Короче, проще написать Code if (x < GetRectMaxX(rect) and x > GetRectMinX(rect)) and (y < GetRectMaxY(rect) and y > GetRectMinY(rect)) then , где х и у- координаты чего либо, а рект- наша область (точнее, рект это рект, но на гуи областей нет, поэтому рект называют областью). Все, никаких бж, а следовательно лишних вызовов.Добавлено (11 Февраль 2012, 14:02:50) --------------------------------------------- GetWidgetX/Y() используй -_-
|
|
|
|
Brut@lus | Дата: Суббота, 11 Февраля 2012, 14:08:06 | Сообщение # 11 |
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
| lawson, спасибо, всё работает) Добавлено (11 Февраль 2012, 14:06:27) ---------------------------------------------
Quote (Ty3uK) GetWidgetX/Y() а гетюнит чем не угодил?Добавлено (11 Февраль 2012, 14:08:06) ---------------------------------------------
Quote (Ty3uK) Короче, проще написать Code if (x < GetRectMaxX(rect) and x > GetRectMinX(rect)) and (y < GetRectMaxY(rect) and y > GetRectMinY(rect)) then , где х и у- координаты чего либо, а рект- наша область (точнее, рект это рект, но на гуи областей нет, поэтому рект называют областью). Все, никаких бж, а следовательно лишних вызовов. заменю
|
|
|
|
Ty3uK | Дата: Суббота, 11 Февраля 2012, 14:10:20 | Сообщение # 12 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Юнит работает значительно медленнее. Равно как и SetUnitPosition() против SetUnitX() и SetUnitY(), ибо последние работают быстрее. Но могут выдать фатал при выходе юнита за границы карты
|
|
|
|
Brut@lus | Дата: Суббота, 11 Февраля 2012, 14:12:44 | Сообщение # 13 |
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
| Теперь мой код имеет данный вид: Code function Trig_pickenterPER_Actions takes nothing returns nothing local real lx = GetWidgetX(udg_sv) local real ly = GetWidgetY(udg_sv) //Проверяем первую область
if (lx < GetRectMaxX(gg_rct_u1) and lx > GetRectMinX(gg_rct_u1)) and (ly < GetRectMaxY(gg_rct_u1) and ly > GetRectMinY(gg_rct_u1)) then call RemoveUnit( udg_sv ) set udg_sv = null set udg_Hero = udg_h[1] call SetUnitOwner( udg_Hero, Player(0), true ) call SetUnitPositionLoc( udg_Hero, GetRectCenter(gg_rct_start) ) call DisableTrigger( gg_trg_pickenterPER ) endif //Проверяем вторую область if (lx < GetRectMaxX(gg_rct_u2) and lx > GetRectMinX(gg_rct_u2)) and (ly < GetRectMaxY(gg_rct_u2) and ly > GetRectMinY(gg_rct_u2)) then call RemoveUnit( udg_sv ) set udg_sv = null set udg_Hero = udg_h[2] call SetUnitOwner( udg_Hero, Player(0), true ) call SetUnitPositionLoc( udg_Hero, GetRectCenter(gg_rct_start) ) call DisableTrigger( gg_trg_pickenterPER ) endif //Проверяем третью область if (lx < GetRectMaxX(gg_rct_u3) and lx > GetRectMinX(gg_rct_u3)) and (ly < GetRectMaxY(gg_rct_u3) and ly > GetRectMinY(gg_rct_u3)) then call RemoveUnit( udg_sv ) set udg_sv = null set udg_Hero = udg_h[3] call SetUnitOwner( udg_Hero, Player(0), true ) call SetUnitPositionLoc( udg_Hero, GetRectCenter(gg_rct_start) ) call DisableTrigger( gg_trg_pickenterPER ) endif
//Проверяем последнюю область if (lx < GetRectMaxX(gg_rct_u4) and lx > GetRectMinX(gg_rct_u4)) and (ly < GetRectMaxY(gg_rct_u4) and ly > GetRectMinY(gg_rct_u4)) then call RemoveUnit( udg_sv ) set udg_sv = null set udg_Hero = udg_h[4] call SetUnitOwner( udg_Hero, Player(0), true ) call SetUnitPositionLoc( udg_Hero, GetRectCenter(gg_rct_start) ) call DisableTrigger( gg_trg_pickenterPER ) endif
endfunction
function InitTrig_pickenterPER takes nothing returns nothing set gg_trg_pickenterPER = CreateTrigger( ) call TriggerRegisterTimerEvent(gg_trg_pickenterPER, 0.4, true) call TriggerAddAction( gg_trg_pickenterPER, function Trig_pickenterPER_Actions ) endfunction
код с подсветкой тут
Сообщение отредактировал Brut@lus - Суббота, 11 Февраля 2012, 14:16:55 |
|
|
|
Ty3uK | Дата: Суббота, 11 Февраля 2012, 14:14:43 | Сообщение # 14 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Первое- виджет юзай в координатах, уже сказал. Второе- обнулять глобалки дикий и ненужный чес, они никуда не утекают
|
|
|
|
Brut@lus | Дата: Суббота, 11 Февраля 2012, 14:17:40 | Сообщение # 15 |
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
| Quote (Ty3uK) Первое- виджет юзай в координатах, уже сказал а я как сделал Quote (Ty3uK) Второе- обнулять глобалки дикий и ненужный чес, они никуда не утекают хорошо
|
|
|
|
Ty3uK | Дата: Суббота, 11 Февраля 2012, 14:19:45 | Сообщение # 16 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Первый вариант который увидел был с юнитом, уже исправил, увидел
|
|
|
|
Brut@lus | Дата: Суббота, 11 Февраля 2012, 14:20:57 | Сообщение # 17 |
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
| Ty3uK, а не надо эти локалки обнулять lx ly?
|
|
|
|
Ty3uK | Дата: Суббота, 11 Февраля 2012, 14:23:47 | Сообщение # 18 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Реальные обнулять не надо
|
|
|
|
Brut@lus | Дата: Суббота, 11 Февраля 2012, 14:26:00 | Сообщение # 19 |
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
| Ty3uK, спасибо. Темку CLOSE, проблема решена.
|
|
|
|