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

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

Ответ
 
happy_horror
2 + 2 = 22 :-D
offline
Опыт: 7,818
Активность:
Как запустить подобие ForGroup и передать параметр?
Ситуация: каждые 5 секунд надо брать определённую группу юнитов и для каждого юнита запускать функцию, выполнение которой для каждого юнита может оказаться разным по времени, но при этом нужно в функцию передать число...

Пробовал цикл на числах - но он не запускает параллельные потоки как ForGroup...

happy_horror добавил:
ещё вопрос6 можно ли в функции ForGroup вызывать функцию для каждого юнита из глобал кода?
Старый 17.04.2008, 21:59
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
есть так называемый (Адольфом -.-) имба-цикл - пробег по юнитам в выборе при попытке формирования группы, только без формирования оной.
Код:
globals
  group gr
  filterfunc Fil
endglobals

function FilFunc takes nothing returns nothing
  if (GetFilterUnit()== ...условие ...) then
    // ...действие с псевдогруппой
  endif
  return false
endfunction

function InitGlobals takes nothing returns nothing
  set gr = CreateGroup()
  set Fil = Filter(function FilFunc)
endfunction
...
call GroupEnumUnitsInRange(gr, 0.00, 0.00, 512.00, Fil)
...
FellGuard добавил:
передать можно так значение (и при ExecuteFunc тоже)
Код:
function CallBack takes nothing returns nothing
  local *type* var = udg_var
  ...
endfunction
...
set udg_var = value
call ForGroup(gr, function CallBack)
...
если же надо передавать для каждого конкретного юнита - то это привязка к самому юниту, либо смена значения udg_var в конце функции CallBack, либо городьба с массивами.. я универсального способа не знаю, а системку измыслить можно.
Старый 17.04.2008, 22:11
happy_horror
2 + 2 = 22 :-D
offline
Опыт: 7,818
Активность:
2 вопроса:

1) почему функция ничего не возвращает, если в конце стоит return false??

Код:
function FilFunc takes nothing returns nothing
  if (GetFilterUnit()== ...условие ...) then
    // ...действие с псевдогруппой
  endif
  return false
endfunction


2) если я использую ForGroup то возможно ли следующее: функция ForGroup вызывает для каждого юнита функцию 1, а функция 1 обращается к функции 2, которая что-либо делает и возвращает функции 1 параметр

happy_horror добавил:
и 3) функция ForGroup ждёт, пока выполнятся callback функции для каждого юнита? (то что они выполняются параллельно я знаю)
Старый 18.04.2008, 02:11
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
1) почему функция ничего не возвращает, если в конце стоит return false??

ибо опечатко^^
Цитата:
есть так называемый (Адольфом -.-)

вобще мне это предложили Тс с хантером...

сбаж
Код:
globals
 group g_temp=CreateGroup()
 boolexpr act=null
 integer var_0=0
 real var_1=0.
endglobals

function WichCalledForEachUnit takes nothing returns boolean
 if var_0!=0 then
 endif
 return false
endfunction

function Init takes nothing returns nothing
 set act=Condition(function WichCalledForEachUnit)
endfunction

...
 set var_0=23412
 set var_1=2345.345
 call GroupEnumUnitsInRange(g_temp, x, y, r, act)
...
Старый 18.04.2008, 10:19
J
expert
offline
Опыт: 48,447
Активность:
ADOLF oO ты написал целых 3 цыфры в 10 сс

happy_horror
2)можно
3)ждет

Отредактировано Jon, 18.04.2008 в 21:08.
Старый 18.04.2008, 20:49
happy_horror
2 + 2 = 22 :-D
offline
Опыт: 7,818
Активность:
Цитата:
Сообщение от Jon
ADOLF oO ты написал целых 3 цыфры в 10 си

happy_horror
2)можно
3)ждет


спасибо, оба варианта я уже и сам проверил
Старый 18.04.2008, 21:07
Ответ

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

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

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

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



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