Сейчас 04:41:39 Пятница, 29 ноября, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
[Вопрос] Альтернатива 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)

Quote (Brut@lus)
BJ

Добавлено (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() используй -_-


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

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(), ибо последние работают быстрее. Но могут выдать фатал при выходе юнита за границы карты

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

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
Блокировки:
Первое- виджет юзай в координатах, уже сказал. Второе- обнулять глобалки дикий и ненужный чес, они никуда не утекают

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

Brut@lusДата: Суббота, 11 Февраля 2012, 14:17:40 | Сообщение # 15
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
Quote (Ty3uK)
Первое- виджет юзай в координатах, уже сказал

%) а я как сделал
Quote (Ty3uK)
Второе- обнулять глобалки дикий и ненужный чес, они никуда не утекают

хорошо pray


 

Ty3uKДата: Суббота, 11 Февраля 2012, 14:19:45 | Сообщение # 16
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Первый вариант который увидел был с юнитом, уже исправил, увидел

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

Brut@lusДата: Суббота, 11 Февраля 2012, 14:20:57 | Сообщение # 17
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
Ty3uK, а не надо эти локалки обнулять lx ly?

 

Ty3uKДата: Суббота, 11 Февраля 2012, 14:23:47 | Сообщение # 18
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Реальные обнулять не надо

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

Brut@lusДата: Суббота, 11 Февраля 2012, 14:26:00 | Сообщение # 19
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
Ty3uK, спасибо. Темку CLOSE, проблема решена.

 

  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz