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

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

Ответ
 
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
Timer vs periodic event
Вобщем, не имея возможности сделать периодический триггер мне приходится делать цикл в обычном триге и запускать 1 раз. ПРоблема как вы уже наверно догадались в малом периоде. ВОпрос: как задать ожидание меньше 0,12 таймерами? Т,е. TriigerSleepAction работают с слишком большими периодами, мне нужен где-то 0,04. А вот как реализовать задержку таймером-хз. ЕСли есть статейка, где именно это расписано-дайте ссыль. А то я 3 статьи посомтрел-сказано что лучшще юзать таймер, а примера нету =(
Старый 09.02.2009, 23:23
NETRAT

offline
Опыт: 83,712
Активность:
Цитата:
TriigerSleepAction работают с слишком большими периодами
откуда такие данные? ограничение снизу присутствует только в PolledWait
Старый 09.02.2009, 23:29
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
Хм, у меня при 0,04 работает не так, как при событии триггера every 0.04

Артте добавил:
Fakov
Перечитай еще раз, я не имею возможности делать через периодический триггер

Артте добавил:
Поставил 0,01-разницы с 0,04 не вижу, да и на глаз видно что куда больше задержка
Старый 09.02.2009, 23:36
ScorpioT1000
Работаем
offline
Опыт: отключен
TriggerSleepAction держит не короче 0.1
Старый 09.02.2009, 23:41
NETRAT

offline
Опыт: 83,712
Активность:
Создаешь переменную - счетчик итераци и меняешь ее по периодическом таймеру, в зависимости от значения переменной выполняешь определенный шаг цикла(или чего тебе еще нужно). Обрисуй проблему более детально
Старый 09.02.2009, 23:42
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
Каждые 0,04 секунды двигать юнита надо. Периодический триггер не могу юзать из-за особенностей спела(с переменными возникнут траблы). ПОэтому делаю так:
Код:
loop
    set lND=GetUnitsInRangeOfLocMatching(600,loc,Condition(function Valid))
        loop
            set t = FirstOfGroup(lND)
        exitwhen t == null 
           ......
            call SetUnitPosition(t, x, y)
            ......
            call GroupRemoveUnit(lND, t)
        endloop
    call TriggerSleepAction(0.04) // вместо этого можно присобачить таймер?
    set time=time+0.04
    exitwhen time>0.5
    endloop
Старый 09.02.2009, 23:46
Hellfim
Новичок
offline
Опыт: 79,637
Активность:
Артте
Код:
call TimerStart(timer,0.00,false,function Delay)

Будет минимальная задержка, примерно 0.012
Старый 09.02.2009, 23:47
ScorpioT1000
Работаем
offline
Опыт: отключен
Цитата:
// вместо этого можно присобачить таймер?

да, но все локальные забивать в глобальные массивы
Старый 09.02.2009, 23:50
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
А когда выполнится Delay?

Артте добавил:
ScorpioT1000
Цитата:
да, но все локальные забивать в глобальные массивы

этого избежать-весь смысл данного изврата)
Старый 09.02.2009, 23:51
Hellfim
Новичок
offline
Опыт: 79,637
Активность:
Артте, через 0.012 секунд. Без изврата никак. В функции Delay(не принципиально важно, можешь назвать ATATATA) будет выполняться код, идущий после цикла.
Старый 09.02.2009, 23:53
NETRAT

offline
Опыт: 83,712
Активность:
посмотри код функции PolledWait - там как раз код разбивается на два куска таймером, второй кусок выполняется после истечения таймера, пример показателен
Старый 09.02.2009, 23:56
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
черт, мне тогда прийдется вынести все действия в другую ф-цию, а этого надо избежать..вот черт..
Старый 09.02.2009, 23:56
ScorpioT1000
Работаем
offline
Опыт: отключен
дак ты понимаешь что так все и делают, иначе все было бы проще некуда
Старый 10.02.2009, 00:01
MF
Что-то вокруг не так
offline
Опыт: 26,594
Активность:
Артте
Используй таймеры и глобальные массивы, это не так сложно как кажеться!
Старый 10.02.2009, 07:33
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
Дело не в сложности, а в отсутсвии глобалок. Ибо с ними отпадает возможность мульти-применения. Тогда вопрос: при использовании внутри scope globals, эти глобалки создаются каждый раз при запуске триггера? То есть если триг запустится пока еще не закочилось выполнение предыдущего запуска, то глобалки будут разные?
Старый 10.02.2009, 11:30
MF
Что-то вокруг не так
offline
Опыт: 26,594
Активность:
Артте
Пишешь в триге так:
Код:
globals
//твои глобалки
endglobals
//твой триггер

Переменные будут обьявляться 1 раз при инициализации карты, ими можно будет пользоваться в любом тригге (кроме ГУИ). Пиши в аську, расскажу подробнее.
Старый 10.02.2009, 11:40
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
А если внутри scope объявить их?
в аську не могу сейчас
Старый 10.02.2009, 11:50
MF
Что-то вокруг не так
offline
Опыт: 26,594
Активность:
Артте
Не вижу смысла. Глобалки обьявляються всегда один раз, на то они и глобалки. Не изобретай ничего нового! Делай глобальный массив, таймер и работай с ним.
Старый 10.02.2009, 12:19
JimALIEN
вдупляет sc2 editor
offline
Опыт: 7,176
Активность:
Без глобалок в данном случае можно обойтись разве что кешем.
Старый 10.02.2009, 13:33
Hellfim
Новичок
offline
Опыт: 79,637
Активность:
Артте, делай так:
Код:
scope A
globals
 private intger lala
 private real array whahaha
endglobals

private function delay takes nothing returns nothing
    set lala=100500
    set whahaha[2]=4.00
    call DestroyTimer(GetExpiriedTimer())
endfunction

function Yeah takes nothing returns nothing
    local timer tom=CreateTimer()
    call TimerStart(tom,0.00,false,function delay)
    set tom=null
endfunction
endscope
Старый 10.02.2009, 14:22
Ответ

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

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

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

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



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