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

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

Закрытая тема
 
ARHUI

offline
Опыт: 3,341
Активность:
Точность таймера
Делаю заклинание, на одном этапе необходимо создать эффект взрывной волны, беру всех юнитов в радиусе n от эпицентра далее цикл на каждые 0.01с (в идеале, хотя из за прикола, по вине которого создал тему, это недостижимо) ну и по формуле юнит сдвигается на сколько надо, так например сто раз... Отладить баланс качество/производительность ещё не успел - внутри функции все косо работает (по времени), под конец уже написал просто цикл и вывод прошедшего у таймера времени
типа

Код:
local timer t = CreateTimer()
call StartTimer( t, 10.00, false, null )
loop
        exitwhen TimerGetRemaining( t ) <= 0.00
        call DisplayTextToPlayer( Player( 0 ), 0.00, 0.00, "TimerGetRemaining(t) = " + R2S( 10.00 - TimerGetRemaining( t ) ) )
        call TriggerSleepAction( 1.00 )
    endloop


вывод:

TimerGetRemaining(t) = 0.000
TimerGetRemaining(t) = 1.150
TimerGetRemaining(t) = 2.350
TimerGetRemaining(t) = 3.475
TimerGetRemaining(t) = 4.575
TimerGetRemaining(t) = 5.700
TimerGetRemaining(t) = 6.900
TimerGetRemaining(t) = 7.999
TimerGetRemaining(t) = 9.099

вопрос куда делась 8?) (понятно куда...)

Либо jass обладает встроенным ИИ, либо точность ему нехарактерна...

Как мне быть? Мне нужны частые вызовы ну судя по всему вызывать что-то чаще 0.1 секунды в варе невозможно...

Отредактировано ARHUI, 27.04.2011 в 21:47.
Старый 27.04.2011, 21:23
Doc

offline
Опыт: 63,163
Активность:
выложи весь код няша.
Doc добавил:
Алсо судя по тому, что ты писал во второй теме, неточен лишь вэйт, таймеры правильны.
Старый 27.04.2011, 21:41
Elf_Stratigo

offline
Опыт: 4,599
Активность:
таймеры и TriggerSleepAction работают в разных координатах времени (както так это говорится)
TimerGetRemaining(t) у меня выдавался не нулевой
Старый 27.04.2011, 21:43
Hanabishi
COOL STATUS
offline
Опыт: отключен
ARHUI, TriggerSleepAction работает криво, и это давно известный факт
юзай только таймеры, они работают до 0.01
Старый 27.04.2011, 22:31
ARHUI

offline
Опыт: 3,341
Активность:
дык а как мне вызывать функцию каждые 0.01? я знаю два пути - либо таймер+цикл, либо триггер отдельный включать - выключать...
Старый 27.04.2011, 22:35
agentex

offline
Опыт: 34,534
Активность:
дык а как мне вызывать функцию каждые 0.01
лол?
TimerStart(timer, period, periodic, callback function)
Старый 27.04.2011, 22:41
ARHUI

offline
Опыт: 3,341
Активность:
callback function - я понял что это функция выполняется после того как таймер истек?
Старый 27.04.2011, 23:23
agentex

offline
Опыт: 34,534
Активность:
да
Старый 27.04.2011, 23:24
ARHUI

offline
Опыт: 3,341
Активность:
как мне вызвать функцию 100 раз подряд с интервалом 0.01?

ARHUI добавил:
создать сто таймеров с разным временем? - это не изврат?)
Старый 27.04.2011, 23:55
Doc

offline
Опыт: 63,163
Активность:
лолшто? почитай-ка ты дружок про таймеры. в любом языке программирования. может и поймешь что-нибудь) алсо, советую посмотреть статью Сергея про жасс, там был занятный пример.
Старый 28.04.2011, 00:02
agentex

offline
Опыт: 34,534
Активность:
это не тема а один сплошной :facepalm:
в любом языке программирования.
далеко не в любом есть готовый для использования класс таймер. почти всегда приходится мучиться с винапи
Старый 28.04.2011, 00:11
Hellfim
Новичок
offline
Опыт: 79,880
Активность:
globals
    hashtable ht=InitHashtable()
endglobals

function myFunc takes nothing returns nothing
    local timer tim=GetExpiredTimer()
    local integer pkey=GetHandleId(tim)
    local integer iteration=LoadInteger(ht,pkey,0)
    //actions
    if (iteration>=100) then
        call FlushChildHashtable(ht,pkey)
        call DestroyTimer(tim)
    else
        call SaveInteger(ht,pkey,0,iteration+1)
    endif
    set tim=null
endfunction

//somwhere in some function
local timer tim=CreateTimer()
call SaveInteger(ht,GetHandleId(tim),0,0) //Написал для наглядности.
call TimerStart(tim,0.01,true,function myFunc)
tim=null
//...
Hellfim добавил:
Например так.
Hellfim добавил:
И это, ты положи последние 3 буквы своего ника на вейты и слипэкшены. Их нужно использовать в самых самых самых самых простых ситуациях, когда ты обленился как собака.
Старый 28.04.2011, 00:15
ARHUI

offline
Опыт: 3,341
Активность:
сразубы так...)

хотя
native TimerStart takes timer whichTimer, real timeout, boolean periodic, code handlerFunc returns nothing

boolean periodic - не обратил внимания... почему то подумал что три аргумента.
Старый 28.04.2011, 00:26
Hellfim
Новичок
offline
Опыт: 79,880
Активность:
Да, действительно, 3 запятых - 3 аргумента -.-'
Без обид, но почитай мануалы.
Тема закрыта в связи с кретинизмом автора.
Старый 28.04.2011, 00:37
Закрытая тема

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

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

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

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



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