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

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

Закрытая тема
 
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт: 6,885
Активность:
Порядок функций
Возникла тут проблемка:
конструкция типа
Код:
globals
     timer udg_Timer
endglobals

function F1 takes nothing returns nothing
     // <действия>
     call TimerStart(udg_Timer,10,false,function F2)
endfunction

function F2 takes nothing returns nothing
     // <действия>
     call TimerStart(udg_Timer,10,false,function F1)
endfunction

set udg_Timer = CreateTimer()
call TimerStart(udg_Timer,10,false,function F2)

Не работает! Из ф-ции F1 нельзя увидеть F2, т.к. она объявлена ниже, это я понял, но мне нужно реализовать такую конструкцию, не подскажете способ?
Старый 31.08.2008, 16:14
Strayiker
Warcraft Forever
offline
Опыт: 3,406
Активность:
Код:
globals
     timer udg_Timer = CreateTimer()
     boolean B = true
endglobals

function F1 takes nothing returns nothing
     if B then
     // <действия>
     set B=false
     else
     // <действия>
     set B=true
     endif
endfunction

call TimerStart(udg_Timer,10,true,function F1)
Старый 31.08.2008, 16:30
df Hunter
Нападатель
offline
Опыт: 5,749
Активность:
Код:
globals
     timer udg_Timer
endglobals

function callF1 takes nothing returns nothing
call ExecuteFunc("F1")
endfunction

function F2 takes nothing returns nothing
     // <действия>
     call TimerStart(udg_Timer,10,false,function callF1)
endfunction

function F1 takes nothing returns nothing
     // <действия>
     call TimerStart(udg_Timer,10,false,function F2)
endfunction

set udg_Timer = CreateTimer()
call TimerStart(udg_Timer,10,false,function F2)
Старый 31.08.2008, 16:41
J
expert
offline
Опыт: 48,447
Активность:
я бы больше отдал предпочтение тому что написал Strayiker
» поправка
Код:
function F1 takes nothing returns nothing
     if B then
         // <действия>
     else
         // <действия>
     endif
     set B = not B
endfunction

Отредактировано Jon, 31.08.2008 в 17:10.
Старый 31.08.2008, 17:04
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Jon, что дает действие not B, оно объявляет переменную как противиположную той что была?
Старый 31.08.2008, 18:17
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт: 6,885
Активность:
Если было бы все так просто...
я примерно показал структуру, но на самом деле между функцией F1 и F2 есть еще несколько, и тогдо через boolean не получиться с вызовом 1 функции, лучше воспользуюсь примером df Hunter-а, это больше подходит, всем спасибо!
Старый 31.08.2008, 18:50
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
между функцией F1 и F2 есть еще несколько
непонял чем это мешает...

Jon добавил:
ну... а если кого интересует мой вариант, то...
Код:
globals
     timer udg_Timer = null
     code func_F2
endglobals

function F1 takes nothing returns nothing
     // <действия>
     call TimerStart(udg_Timer, 10, false, func_F2)
endfunction

function F2 takes nothing returns nothing
     // <действия>
     call TimerStart(udg_Timer, 10, false, function F1)
endfunction

set func_F2 = function F2
set udg_Timer = CreateTimer()
call TimerStart(udg_Timer,10,false, func_F2)
Старый 31.08.2008, 18:57
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт: 6,885
Активность:
Jon, мешает тем, что функции должны вызываться по цепочке, а потом опять перейти в начало этой цепи... оставлю как предложил df Hunter, тему можно закрыть!
Старый 31.08.2008, 19:05
adic3x

offline
Опыт: 108,439
Активность:
Alex_Hell, вариант жоника с переменной впринципе тоже норм)
занеси функцию в переменную и добавляй ее в таймер как хочешь)
Старый 31.08.2008, 19:49
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт: 6,885
Активность:
ADOLF, просто я работаю на обычном WE и там нельзя делать глобалкой тип code, так что не буду измудряться))
Старый 31.08.2008, 22:28
Toadcop

offline
Опыт: 54,313
Активность:
если это выполняетьса не безумно часто то Ехекут лутче =) "безумно" ну это так раз 50+ в секунду.
Старый 01.09.2008, 03:55
J
expert
offline
Опыт: 48,447
Активность:
Toadcop это с какого перепугу он лутче?)

Отредактировано Jon, 01.09.2008 в 10:12.
Старый 01.09.2008, 08:20
adic3x

offline
Опыт: 108,439
Активность:
Alex_Hell, сабж, очень рекомендую скачать неп пак вообще то, ибо очень полезная тулза (если ты несчастливый обладатель 1.22 вара специмально для тебя в первом посту темы в этом разделе выложен редактор от 1.21)

Цитата:
это с какого перепугу он лутче?)


экзекутить к примеру можно по строке из массива, коде не может быть массивом, хотя мона делать ветвление бин деревом

как аналог екзекута мона юзать тригерЕвалуте, он по идее немного быстрее екзекута, хотя опять же тогда краше юзать коде
Старый 01.09.2008, 13:44
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
Сообщение от ADOLF
экзекутить к примеру можно по строке из массива, коде не может быть массивом

какая разница? можно под каждую функция создавать переменую, одна лишняя переменая (code) или одна лишняя функций (екзекут) + нетрукодинг
Старый 01.09.2008, 14:20
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт: 6,885
Активность:
Toadcop, вополняется это не часто, ну ~раз в несколько минут))
Спасибо, вопрос закрыт, а то спорят тут что лучше, да все одно и тоже))
Старый 01.09.2008, 16:04
adic3x

offline
Опыт: 108,439
Активность:
Jon, Toadcop правильно сказал - если выполняется нечасто то оно посути без разницы)

хотя я бы наверное делал через коде, ну опять же, мы же не обсуждаем кому какого цвета туалетная бумага нравиццо?!) т.е. тут это низначительно)

закрыто ибо опасаюсь холиварщины)))
Старый 01.09.2008, 18:20
Закрытая тема

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

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

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

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



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