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

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

Ответ
 
Doc

offline
Опыт: 63,163
Активность:
Timer Bug
Решил извратиться и хранить массив code с помощью массива таймеров, сохраняя code непосредственно в callback таймера. Поясню:

function A takes code c returns nothing
set Timer[count] = CreateTimer()
call TimerStart(Timer[count], 0.0, false, c)
call PauseTimer(Timer[count])
set count = count + 1
endfunction
А потом я продолжаю нужный таймер с помощью ResumeTimer. Все бы хорошо, но: коллбек вызывается дважды, причем при втором вызове попытка получить GetHandleId, чревата возвращение нуля, следовательно GetExpiredTimer тоже null. Это как-то правится или что?
Старый 19.02.2011, 15:01
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Doc, эм что за изврат?? О_о Не проще хранить массив code???
Код:
globals
 code array codes
 integer count = 0
endglobals

function RemCode takes integer id returns nothing
 set count = count - 1
 set codes[id] = codes[count]
 set codes[count] = null
endfunction

function SaveCode takes code c returns integer
 set codes[count] = c
 set count = count + 1
 return count - 1
endfunction

function RunCode takes integer id returns nothing
 local timer t = CreateTimer()
 call TimerStart(t,0.001,false,codes[id])
endfunction
Старый 19.02.2011, 15:19
Doc

offline
Опыт: 63,163
Активность:
alexprey, создай пустую карту, вставь свой код, сохрани, запусти.
Старый 19.02.2011, 15:20
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Doc, хммм, неожиданный ход от близов =( Ну может в тригах тогда?
Старый 19.02.2011, 15:26
Doc

offline
Опыт: 63,163
Активность:
alexprey, не, я спрашиваю не альтернативы, а то как можно поправить этот способ, возможно кто-нибудь сталкивался.
Ладно, если никто больше не знает, то закрывайте тему, сделал в принципе так, хотя не хотел:
dtimer dt = GetExpired(GetExpiredTimer())
        if (dt != 0){
		//actions
	}
Старый 19.02.2011, 15:29
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Doc, пробовал увеличить период таймера???
Старый 19.02.2011, 15:31
Doc

offline
Опыт: 63,163
Активность:
alexprey, да, у меня итак 0.1 стоит.
Старый 19.02.2011, 15:40
DioD

offline
Опыт: 45,134
Активность:
set svz_data_1[ID] = Condition(codeparam)
set svz_data_2[Hash8190(GetHandleId(svz_data_1[ID]))] = ID

...

call TriggerAddCondition(TMPTRG,svz_data_1[VALUE])
call TriggerEvaluate(TMPTRG)
call TriggerRemoveCondition(...)
Старый 19.02.2011, 15:41
J64_

offline
Опыт: 4,724
Активность:
А можно еще фильтрами групп, то тогда функция будет выполняться именно в том месте где записан+в новом потоке ^^, в вверхнем случае функция запустится в конце.
TempBoolexpr=Condition(c)
GroupEnumUnitsCounted(G,x,y,0.0,TempBoolexpr,1)
DestroyBoolexpr(TempBoolexpr)
Старый 19.02.2011, 21:35
Ответ

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

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

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

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



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