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

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

Закрытая тема
 
Xipxop
Круче варика, только c++!
offline
Опыт: 7,646
Активность:
Вызов функции в ForGroup
Я хочу знать, как можно вызвать свою функцию Проинициированую в начале карты в выборе юнитов...

» В самом начале карты (проинициированно)
Код:
function GromSkill takes real x1, real y1 returns nothing
    local unit Target
    local real x2
    local real y2
    local real r
    
    if IsUnitType(GetEnumUnit(), UNIT_TYPE_HERO) == false then
        set Target = GetEnumUnit()
        set x2 = GetUnitX(Target)
        set y2 = GetUnitY(Target)
        set r = Rad2Deg(Atan2(y2-y1,x2-x1))
        call SetUnitPositionLoc( Target, PolarProjectionBJ(GetUnitLoc(Target), 20.00, r) )
    else
    endif
endfunction


» Триггер
Код:
function Trig_Every_5_sec_J_A takes nothing returns nothing
    local unit un=GetEnumUnit()
    local real x1=GetUnitX(un)
    local real y1=GetUnitY(un)
    
    call ForGroupBJ( GetUnitsInRangeOfLocAll(300.00, GetUnitLoc(un)), GromSkill(x1,y1) )
endfunction

function Trig_Every_5_sec_J_Actions takes nothing returns nothing
    call ForGroupBJ( udg_Gr, function Trig_Every_5_sec_J_A )
endfunction

//===========================================================================
function InitTrig_Every_5_sec_J takes nothing returns nothing
    set gg_trg_Every_5_sec_J = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( gg_trg_Every_5_sec_J, 0.05 )
    call TriggerAddAction( gg_trg_Every_5_sec_J, function Trig_Every_5_sec_J_Actions )
endfunction


в чем проблема? Ведь по идее все должно работать!?
Старый 21.07.2012, 18:25
Hate
конь вакуумный
offline
Опыт: 43,117
Активность:
бж фор груп функция не должна ничего брать и возвращать, код бред, утечки памяти передают привет.
Старый 21.07.2012, 18:36
Xipxop
Круче варика, только c++!
offline
Опыт: 7,646
Активность:
Что с bj что без него все одно и тоже.
Тогда как научить ForGroup брать нужные мне функции и их использовать?
Старый 21.07.2012, 18:50
Hate
конь вакуумный
offline
Опыт: 43,117
Активность:
Xipxop:
Что с bj что без него все одно и тоже.
Тогда как научить ForGroup брать нужные мне функции и их использовать?
глобалки
Старый 21.07.2012, 18:56
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Xipxop, учи основы
Старый 21.07.2012, 19:24
respect_gg

offline
Опыт: 3,650
Активность:
лучше прогонят циклом аля
local group g = CreateGroup()
local unit first

call GroupEnumUnitsInRange(g, x, y, 500.00, null)

loop
set first = FirstOfGroup(g)
exitwhen first == null
if IsUnitType(first, UNIT_TYPE_DEAD) == false then
      call ....
      call GroupRemoveUnit(g, first)
else
      call GroupRemoveUnit(g, first)
endif
endloop
вроде так проще...ну точнее я так привык
Старый 21.07.2012, 19:49
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
respect_gg, а так еще лучше будет
local group g = CreateGroup()
local unit first
call GroupEnumUnitsInRange(g, x, y, 500.00, null)
loop
set first = FirstOfGroup(g)
exitwhen first == null
if IsUnitType(first, UNIT_TYPE_DEAD) == false then
call ....
endif
call GroupRemoveUnit(g, first)
endloop
Старый 21.07.2012, 19:50
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,245
Активность:
Nerevar, А еще лучше сделать глобалку boolexp и использовать ее чтобы левых юнитов не добавлять...
Старый 21.07.2012, 20:51
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
Vadik29, я поправил его код,а не говорил что удобнее,а что быстрее
ты предлагаешь юзать глобалку+булэкспр чтобы потом циклом по группе пройтись? это вообще рак

Отредактировано Nerevar, 21.07.2012 в 21:06.
Старый 21.07.2012, 21:01
Xipxop
Круче варика, только c++!
offline
Опыт: 7,646
Активность:
Цитата:
Сообщение от respect_gg
лучше прогонят циклом аля
""
local group g = CreateGroup()
local unit first

call GroupEnumUnitsInRange(g, x, y, 500.00, null)

loop
set first = FirstOfGroup(g)
exitwhen first == null
if IsUnitType(first, UNIT_TYPE_DEAD) == false then
call ....
call GroupRemoveUnit(g, first)
else
call GroupRemoveUnit(g, first)
endif
endloop
""
вроде так проще...ну точнее я так привык


Спасибо тебе, твой метод отличен! Благодарю.
Тема закрыта
Старый 21.07.2012, 21:08
Закрытая тема

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

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

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

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



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