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

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

Ответ
 
DragonSpirit
у - уходи
offline
Опыт: 22,625
Активность:
Замена wait`во таймерами
Я смотрю тут умные люди предлагают(особенно для спеллов) заменять wait`ы таймерами
Можно поподробнее объяснить как это сделать
Желательно с примером
Заранее благодарю
Старый 16.06.2009, 00:56
SRes
1110101000
offline
Опыт: 9,997
Активность:
Код:
globals
  timer MyTimer
endglobals

function TimerFunc takes nothing returns nothing
   call KillUnit( vasya999)
endfunction

function MegaSpell takes nothing returns nothing
   call TimerStart( MyTimer,  time, false, function TimerFunc)
endfunction
Старый 16.06.2009, 01:01
DragonSpirit
у - уходи
offline
Опыт: 22,625
Активность:
SRes не совсем понял...
вот к примеру:есть TriggerSleepAction(2),и как его на таймер заменить?
Старый 16.06.2009, 01:07
SRes
1110101000
offline
Опыт: 9,997
Активность:
Код:
globals
   timer MyTimer
endglobals

function TimerFunc takes nothing returns nothing
   call KillUnit( vasya999)
endfunction

function MegaSpell takes nothing returns nothing
   call TimerStart( MyTimer,  2, false, function TimerFunc)
endfunction
Старый 16.06.2009, 01:21
Anufis

offline
Опыт: 6,290
Активность:
Спс
Старый 16.06.2009, 01:28
DragonSpirit
у - уходи
offline
Опыт: 22,625
Активность:
SRes всё ясно,благодарю
темку можно клозить
Старый 16.06.2009, 01:31
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
DragonSpirit
» old code

Код:
globals
endglobals

function Main takes nothing returns nothing
    local unit caster = GetSpellAbilityUnit()
    local unit target = GetSpellTargetUnit()
    call UnitAddAbility(caster,'A000')
    call UnitAddAbility(target,'A001')
    call TriggerSleepAction(2.00)
    call UnitRemoveAbility(caster,'A000')
    call UnitRemoveAbility(target,'A001')
endfunction


» new code

Код:
globals
    unit target = null
    unit caster = null
endglobals

function AfterWait takes nothing returns nothing
    call UnitRemoveAbility(caster,'A000')
    call UnitRemoveAbility(target,'A001')
    call DestroyTimer(GetExpiredTimer())
endfunction

function Main takes nothing returns nothing
    set caster = GetSpellAbilityUnit()
    set target = GetSpellTargetUnit()
    call UnitAddAbility(caster,'A000')
    call UnitAddAbility(target,'A001')
    call TimerStart(CreateTimer(),2.00,false,function AfterWait)
endfunction

Старый 16.06.2009, 01:33
DragonSpirit
у - уходи
offline
Опыт: 22,625
Активность:
Hellfim выходит что таймер запускается один раз?
Старый 16.06.2009, 01:41
FaB0SS

offline
Опыт: 2,504
Активность:
если напишешь:
Код:
call TimerStart(CreateTimer(),2.00,true,function AfterWait)

будет выполнятся периодично, пока не вызовешь:
Код:
call DestroyTimer(твой таймер)
Старый 16.06.2009, 03:27
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт: 8,394
Активность:
Цитата:
будет выполнятся периодично, пока не вызовешь:

Код:
call DestroyTimer(твой таймер)

False, достаточно
Код:
call TimerPause(t)

чтобы не создавать таймер вновь
Старый 16.06.2009, 06:50
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
ELDAR, зачем? =) Так проще, и память под переменную не выделяется.
Старый 16.06.2009, 16:09
Garret
Недоброе творится
offline
Опыт: 3,893
Активность:
Hellfim
Где-то читал, что безопаснее, перед тем, как удалять таймер, его остановить (если он многократный)
Старый 16.06.2009, 17:59
JimALIEN
вдупляет sc2 editor
offline
Опыт: 7,176
Активность:
Пожалуй единственное неудобство всего этого в том, что передать что либо в функцию истечения таймера можно лиш глобалками, ну или вбить кучу параметров под таймер в кеш, а точнее в хеш-таблицу, которой нас скоро обрадуют близы=) Хотя это наверно будет врядли использоваца для однопериодовых таймеров заменяющих вейт...
Старый 16.06.2009, 18:51
ScorpioT1000
Работаем
offline
Опыт: отключен
это не таймеры заменяют вейт, это вейт заменяет таймеры )
Старый 17.06.2009, 00:42
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
а если раскрыть polled wait, то там создание гдето 2 таймеров на 0.1 а потом удаление...
Старый 17.06.2009, 02:58
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт: 8,394
Активность:
Цитата:
ELDAR, зачем? =) Так проще, и память под переменную не выделяется.

если у тя есть глобальный таймер для определенных действий, то согласись, что удалять , а потом создавать, это полный бред.
Старый 17.06.2009, 08:02
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
ELDAR, согласен, но в данном случае так гораздо лучше =)
Старый 17.06.2009, 15:02
MupaMaX
Мой статус
offline
Опыт: 1,495
Активность:
Можете объяснить в чем преимущество таймера ?
Старый 17.06.2009, 17:31
DragonSpirit
у - уходи
offline
Опыт: 22,625
Активность:
MupaMaX вроде вэйты сами по себе глюченые
Старый 17.06.2009, 17:39
SRes
1110101000
offline
Опыт: 9,997
Активность:
В безотказности, точности. Если ты скажешь вейту быть 0.01, то он все ровно будет 0.1, т.к. 0.1 - минимум... А также скоростью и отсутствием утечек.
Старый 17.06.2009, 17:39
Ответ

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

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

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

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



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