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

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

Ответ
 
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт: 8,394
Активность:
Создание переодичности
1)Люди помогите я натолкнулся на стену. Как мне создать переодичность внутри тригера?
2)И вот еще можно ли запускать функцию и через некоторое время её выключать?
Старый 12.12.2008, 15:10
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
ELDAR
1) Таймером
2) Можно
Старый 12.12.2008, 15:19
agentex

offline
Опыт: 34,834
Активность:
функцию нельзя выключить. ее можно только выполнить или нет. а вот уничтожить таймер, который запускает функцию, можно.
Старый 12.12.2008, 15:27
Dragon Knight
Меткий стрелок!!!
offline
Опыт: 4,138
Активность:
Цитата:
1)Люди помогите я натолкнулся на стену. Как мне создать переодичность внутри тригера?


Внутри триггера никак, можно создавать периодичность внешним триггером или таймером
Старый 12.12.2008, 15:30
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт: 8,394
Активность:
agentex ну с таймером и так понятно
Hellfim 2-ое если можно то как и 1-ое, таймером при перидике в 0.01 сек будет норм или все таки будет тормозить
Старый 12.12.2008, 15:32
Dragon Knight
Меткий стрелок!!!
offline
Опыт: 4,138
Активность:
Цитата:
2-ое если можно то как и 1-ое, таймером при перидике в 0.01 сек будет норм или все таки будет тормозить


Что будет томозить? Если вар, то смотря чем и как нагружена функция, т.е. если операций с кешем мало, то никаких тормозов не будет, а если период, то нет - не будет
Старый 12.12.2008, 15:37
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт: 8,394
Активность:
если ни лень то выложите как это примерно должно выглядеть
Старый 12.12.2008, 15:44
Dragon Knight
Меткий стрелок!!!
offline
Опыт: 4,138
Активность:
Код:
function OnTimerFunc takes nothing returns nothing
...
endfunction

function Trig* takes nothing returns nothing
    local timer t = CreateTimer()
    call TimerStart(t, period(real), periodic(boolean), function OnTimerFunc)

    set t = null
endfunction
Старый 12.12.2008, 15:51
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт: 8,394
Активность:
Цитата:
TimerStart(t, period(real), periodic(boolean), function OnTimerFunc)


а как быть с количеством раз

ELDAR добавил:
agentex выще я хочу сделать перемещение каждые 0.01 сек
Старый 12.12.2008, 16:02
Лось

offline
Опыт: 7,223
Активность:
Аттачиш на таймер интегер 5, в таймере с каждым разом уменьшаеш на один, проверяеш когда интегер == 0 убиваеш таймер.
Старый 12.12.2008, 16:05
Dragon Knight
Меткий стрелок!!!
offline
Опыт: 4,138
Активность:
Заносить в переменную количество оборотов таймера и когда не требуется делать никаких действий этим таймером(т.е. больше не нужен) - уничтожать(call DestroyTimer(t))
Старый 12.12.2008, 16:05
agentex

offline
Опыт: 34,834
Активность:
Цитата:
Аттачиш на таймер интегер 5

это как?
Старый 12.12.2008, 16:06
Лось

offline
Опыт: 7,223
Активность:
Кэшем или массивами.
Старый 12.12.2008, 16:07
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт: 8,394
Активность:
я думяю сделать вот так

Код:
function Trig* takes integer i returns nothing
    local timer t = CreateTimer()
........
    if i >0 then
    call TimerStart(t, period(real), periodic(boolean), function Trig*(i-1))
    endif

    set t = null
endfunction


будет канать?
Старый 12.12.2008, 16:09
Лось

offline
Опыт: 7,223
Активность:
Нет, проверка должна выполняться в ф-ии он таймер.

Лось добавил:
Код:
function OnTimerFunc takes nothing returns nothing
    local integer int = GetMyInt(GetExpiredTimer())

    // Some Actions

    if int == 0 then
        call DestroyTimer(GetExpiredTimer()
    else
         set int = int - 1
    endif
endfunction

function Trig* takes nothing returns nothing
    local timer t = CreateTimer()
    local integer int = 5
    local Attach(t,int)
    call TimerStart(t, period(real), periodic(boolean), function OnTimerFunc)

    set t = null
endfunction
Старый 12.12.2008, 16:15
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт: 8,394
Активность:
Лось local integer int = GetMyInt(GetExpiredTimer())

объясни как эта строка работает

ELDAR добавил:
ладно раз так ни особо получается, то можно ли зделать задержку в 0.01 сек при помощи таймера
Старый 12.12.2008, 16:55
agentex

offline
Опыт: 34,834
Активность:
ELDAR, омг, функция выполняющаяся таймером не может ничего принимать и возвращать... токо как сказал Лось сторить на хендл.

agentex добавил:
Цитата:
объясни как эта строка работает

я думаю он имел ввиду что ты сам должен написать функцию GetMyInt которая по таймеру будет возвращать нужную переменную
Старый 12.12.2008, 17:01
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт: 8,394
Активность:
как хундлу присвоить значение переменной
Set Handle = Integer
так
Старый 12.12.2008, 18:42
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
ELDAR, хендл это игровой тип... Помоему все что может принимать значение null это хендл, т.е. юниты, декорации, тригеры и прочее.
Старый 12.12.2008, 19:00
agentex

offline
Опыт: 34,834
Активность:
ELDAR, в данном контексте, хендл - это ссылка на игровой обьект, таймер.

agentex добавил:
ну кеш как известно - зло (хотя я это и отрицаю), так что используй массивы
Старый 12.12.2008, 19:45
Ответ

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

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

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

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



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