Макеты
Новые сообщения Участники Правила Поиск
  • Страница 1 из 2
  • 1
  • 2
  • »
wait vs timer
ErickSkrauch Дата: Вторник, 29.03.2011, 19:01 | Сообщение # 1
Сообщений: 810
Замечания:
Уважение
[ 31 ]
Награды
[ 0 ]
Оффлайн
Научите меня плиз работе с таймерами biggrin


Windrunner (лиза): Ануфиз сказал кто будет делать кто идиот реборн тот попидет в бань
Windrunner (лиза): Если Эрик умрет, за ним акат, то я стану императрицей ESP.
Windrunner (лиза): Я взломаю аката, и передам себе власть!
zelenayasmert)) Дата: Вторник, 29.03.2011, 19:15 | Сообщение # 2
Сообщений: 55
Замечания:
Уважение
[ 10 ]
Награды
[ 1 ]
Оффлайн
АФФТАР ----- АКАТ

Для начала небольшой FAQ
В:Что такое таймер?
О:из названия не понятно? Таймер-(англ. timer < time время) — прибор производственно-технического, военного или бытового назначения, в заданный момент времени выдающий определённый сигнал, либо включающий — выключающий какое либо оборудование через своё устройство коммутации электроцепи (копипаста из википедии). В WC3 таймеры используются для отсчета времени перед совершением какого-либо действия.

В: Зачем нужны таймеры если есть wait?
О: WAIT весьма глюченная функция, это раз, да и таймеры НАМНОГО функциональнее чем wait. Например использование таймеров в сочетании с хеш-таблицами открывает новый горизонт возможностей.

В: ГУИ или Jass таймеры?
О: Ответ однозначен: Jass. Утечек меньше, функциональность больше. Доказано.

Теперь перейдем к самим таймерам
Для работы с таймерами используют следующие функции

Code

native CreateTimer takes nothing returns timer //используем для создания нового таймера
native TimerStart takes timer whichTimer, real timeout, boolean periodic, code handlerFunc returns nothing //Стартуем Таймер

Про функцию TimerStart напишу подробнее. Первый аргумент whichTimer отвечает за то, какой таймер стартуем. Второй аргумент timeout - длительность таймера в секундах. Третий аргумент periodic принимает значение (false или true) которое отвечает за переодичность таймера. true - периодичный, false - не периодичный соответственно. Четвертый аргумент отвечает за то, какая функция запуститься по истечению таймера. ВАЖНО!!! Любая функция выступающая в качестве кода, как например четвертый аргумент функции TimerStart не должна сама брать никаких аргументов.
Вот пример вызова функции
Code

call TimerStart( CreateTimer(), 10.00, false, function My_func )

Идем дальше
Code

native TriggerRegisterTimerExpireEvent takes trigger whichTrigger, timer t returns event //Тут все понятно, добавляем в триггер событие реагирующее на истечение таймера.
native DestroyTimer takes timer whichTimer returns nothing //Уничтожит таймер
native PauseTimer takes timer whichTimer returns nothing //Ставит таймер на паузу
native ResumeTimer takes timer whichTimer returns nothing //Снимает таймер с паузы
native TimerGetTimeout takes timer whichTimer returns real //Возвращает таймаут таймера в первом аргументе
native TimerGetRemaining takes timer whichTimer returns real //Возвращает количество времени, которое осталось до истечения таймера

С последними двумя не работал

На этом пока все, жду вопросов. По возможности буду дополнять

zelenayasmert)) Дата: Вторник, 29.03.2011, 19:16 | Сообщение # 3
Сообщений: 55
Замечания:
Уважение
[ 10 ]
Награды
[ 1 ]
Оффлайн
и моя небольшая нубо темка
http://xgm.ru/forum....C%E5%F0 (а поорать)
zelenayasmert)) Дата: Вторник, 29.03.2011, 19:23 | Сообщение # 4
Сообщений: 55
Замечания:
Уважение
[ 10 ]
Награды
[ 1 ]
Оффлайн
и да, wait vs timer
WAIT WINS ROUND 1 задавив толпой гуишников
TIMER WINS ROUND 2 задавив функциональностью
BLIZZARD WINS ROUND 3,4,5...ну вы понели
ErickSkrauch Дата: Вторник, 29.03.2011, 19:24 | Сообщение # 5
Сообщений: 810
Замечания:
Уважение
[ 31 ]
Награды
[ 0 ]
Оффлайн
Quote (Zelenayasmert)))
На этом пока все, жду вопросов. По
возможности буду дополнять

Ты или Акат?

Почитал, ужаснулся, наложил в штаны ... Сменил штаны, перечитал заново - ничего не понял:(

Выложите кусок кода с таймером (тока не карту, а код).



Windrunner (лиза): Ануфиз сказал кто будет делать кто идиот реборн тот попидет в бань
Windrunner (лиза): Если Эрик умрет, за ним акат, то я стану императрицей ESP.
Windrunner (лиза): Я взломаю аката, и передам себе власть!
zelenayasmert)) Дата: Вторник, 29.03.2011, 19:26 | Сообщение # 6
Сообщений: 55
Замечания:
Уважение
[ 10 ]
Награды
[ 1 ]
Оффлайн
Quote (ErickSkrauch)
Почитал, ужаснулся, наложил в штаны ... Сменил штаны, перечитал заново - ничего не понял:(

Выложите кусок кода с таймером (тока не карту, а код).


нуботему мою на что выложил?
function F2 takes nothing returns nothing
local timer t = GetExpiredTimer()
//твои действия
set t = null
endfunction
function F1 takes nothing returns nothing
local timer t = CreateTimer()
call TimerStart(t,1.,true,function F2)
endfunction
у call TimerStart после "1." есть булево значение - оно определяет цикличность таймера: т.е.
false - 1 раз сработает
true - будет работать пока не удалишь или не остановишь таймер (DestroyTimer(t))
function F2 - запускает функцию по истечении указанного времени, после t (значение типа real)
zelenayasmert)) Дата: Вторник, 29.03.2011, 19:28 | Сообщение # 7
Сообщений: 55
Замечания:
Уважение
[ 10 ]
Награды
[ 1 ]
Оффлайн
Quote (ErickSkrauch)
Ты или Акат?

акат офк
ErickSkrauch Дата: Вторник, 29.03.2011, 19:30 | Сообщение # 8
Сообщений: 810
Замечания:
Уважение
[ 31 ]
Награды
[ 0 ]
Оффлайн
Это читал, сменил 2 штаны:) Мне нада попроще + в 1 тригер (хотя я читал твою тему, там спорили насчет этого, тока я не понял, кто прав?)


Windrunner (лиза): Ануфиз сказал кто будет делать кто идиот реборн тот попидет в бань
Windrunner (лиза): Если Эрик умрет, за ним акат, то я стану императрицей ESP.
Windrunner (лиза): Я взломаю аката, и передам себе власть!
zelenayasmert)) Дата: Вторник, 29.03.2011, 19:34 | Сообщение # 9
Сообщений: 55
Замечания:
Уважение
[ 10 ]
Награды
[ 1 ]
Оффлайн
то что кинуто, является одним триггером, просто до меня не доходило
нужно а) перевести все в джасс(или просто функции в самом верху мапы всунуть, и вызывать спокойно)
б)вызвать функции с нужными приписками
ErickSkrauch Дата: Вторник, 29.03.2011, 19:38 | Сообщение # 10
Сообщений: 810
Замечания:
Уважение
[ 31 ]
Награды
[ 0 ]
Оффлайн
То есть:
Функция 1 - запустить таймер.
Функция 2 - среагировать на конец таймера (фак йеех, как? 2 событие? Что за баян?).



Windrunner (лиза): Ануфиз сказал кто будет делать кто идиот реборн тот попидет в бань
Windrunner (лиза): Если Эрик умрет, за ним акат, то я стану императрицей ESP.
Windrunner (лиза): Я взломаю аката, и передам себе власть!
Akat Дата: Вторник, 29.03.2011, 19:44 | Сообщение # 11
Сообщений: 264
Замечания:
Уважение
[ 19 ]
Награды
[ 1 ]
Оффлайн
ErickSkrauch, Вторая функция производит действия после таймера. Фактически это нужно чтобы достать приаттаченые данные к таймеру с помощью хеш-таблиц. Ну другого применения я не нашел

Добавлено (29.03.2011, 19:41)
---------------------------------------------
Ах да, советую делать call DestroyTimer(t) вместо/вместе с обнулением локалки. Потому что локалка сама по себе не будет большой утечкой, если мы удалим сам таймер, но если мы просто обнулим локалку не обнуляя таймер, вот тогда будут лаги и утечки

Добавлено (29.03.2011, 19:44)
---------------------------------------------

Quote (Akat)
Фактически это нужно чтобы достать приаттаченые данные к таймеру с помощью хеш-таблиц. Ну другого применения я не нашел

Ой, тьфу, бред написал. Это и есть то что запуститься после таймера. Ну просто для обычного таймера можно создавать триггерок
ErickSkrauch Дата: Вторник, 29.03.2011, 19:44 | Сообщение # 12
Сообщений: 810
Замечания:
Уважение
[ 31 ]
Награды
[ 0 ]
Оффлайн
Ребят, я нифига не понял, скиньте тригер\кусок джаса сюда (с нубскими коментариями к каждому действию).


Windrunner (лиза): Ануфиз сказал кто будет делать кто идиот реборн тот попидет в бань
Windrunner (лиза): Если Эрик умрет, за ним акат, то я стану императрицей ESP.
Windrunner (лиза): Я взломаю аката, и передам себе власть!
Akat Дата: Вторник, 29.03.2011, 20:08 | Сообщение # 13
Сообщений: 264
Замечания:
Уважение
[ 19 ]
Награды
[ 1 ]
Оффлайн
ErickSkrauch, эм, зелень же кинул мою статью. Там есть все функции и нубские комментарии
zelenayasmert)) Дата: Вторник, 29.03.2011, 20:09 | Сообщение # 14
Сообщений: 55
Замечания:
Уважение
[ 10 ]
Награды
[ 1 ]
Оффлайн
function F2 takes nothing returns nothing //// обьявляем функцию
local timer t = GetExpiredTimer() /// создаем локальный таймер= истекший таймер
//твои действия
set t = null /// обнуляем
endfunction ///оканчиваем функцию

function F1 takes nothing returns nothing /// обьявляем функцию
local timer t = CreateTimer() /// создаем локальный таймер
call TimerStart(t,1.,true,function F2) /// стартуем
endfunction //// оканчиваем функцию

//все что дальше можешь не анализировать, то уже событие
function InitTrig_Timer takes nothing returns nothing //// функция события
local trigger t = CreateTrigger( ) //// создаем триггер
call TriggerRegisterPlayerEventEndCinematic( t, Player(0) ) /////событие: игрок закончил синематик
call TriggerAddAction( t, function F1 ) //// добавляем действие в триггер
endfunction

Akat Дата: Вторник, 29.03.2011, 20:12 | Сообщение # 15
Сообщений: 264
Замечания:
Уважение
[ 19 ]
Награды
[ 1 ]
Оффлайн
Quote (zelenayasmert)))
local timer t = GetExpiredTimer() /// создаем локальный таймер= истекший таймер

мы НЕ создаем таймер. Мы создаем локальную переменную - ссылку на истекший таймер. вообще необязательна (и да, как то странно делать локалку для того чтобы её обнулить)
zelenayasmert)) Дата: Вторник, 29.03.2011, 20:16 | Сообщение # 16
Сообщений: 55
Замечания:
Уважение
[ 10 ]
Награды
[ 1 ]
Оффлайн
Quote (Akat)
мы НЕ создаем таймер. Мы создаем локальную переменную - ссылку на истекший таймер. вообще необязательна (и да, как то странно делать локалку для того чтобы её обнулить)

я скинул то что в моей нуботемке лежало, ну и свои коменты дорисовал
ну насчет "создания" таймера, я имел в виду создаем локалку, перепутал

Добавлено (29.03.2011, 20:16)
---------------------------------------------

Quote (Akat)
вообще необязательна (и да, как то странно делать локалку для того чтобы её обнулить)

ну думаю если ее использовать больше одного раза, это немного сократит код
Akat Дата: Вторник, 29.03.2011, 20:19 | Сообщение # 17
Сообщений: 264
Замечания:
Уважение
[ 19 ]
Награды
[ 1 ]
Оффлайн
И да, насчет wait, вообще не советую её использовать
ErickSkrauch Дата: Вторник, 29.03.2011, 20:24 | Сообщение # 18
Сообщений: 810
Замечания:
Уважение
[ 31 ]
Награды
[ 0 ]
Оффлайн
Quote (Zelenayasmert)))
call TriggerRegisterPlayerEventEndCinematic( t,
Player(0) ) /////событие: игрок закончил
синематик

Какой, к черту, синематик???
Более-менее понял, но! А Хэш тут при чем тогда?



Windrunner (лиза): Ануфиз сказал кто будет делать кто идиот реборн тот попидет в бань
Windrunner (лиза): Если Эрик умрет, за ним акат, то я стану императрицей ESP.
Windrunner (лиза): Я взломаю аката, и передам себе власть!
Akat Дата: Вторник, 29.03.2011, 20:34 | Сообщение # 19
Сообщений: 264
Замечания:
Уважение
[ 19 ]
Награды
[ 1 ]
Оффлайн
ErickSkrauch, ну смотри, аттачишь например юнита к таймеру, потом по истечению достаешь его из хеша по хендлу таймера и делаешь действия. Ну это так, пример.
Иначе по нормальному не получиться сделать действия с юнитом спустя некоторое время
zelenayasmert)) Дата: Вторник, 29.03.2011, 20:34 | Сообщение # 20
Сообщений: 55
Замечания:
Уважение
[ 10 ]
Награды
[ 1 ]
Оффлайн
Quote (ErickSkrauch)
А Хэш тут при чем тогда?

а хеш это уже совсем другая история©
Quote (ErickSkrauch)
Какой, к черту, синематик???

ну событие чувак такое поставил(нажатие esc)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:


Рекламный блок

Топ сообщений

1. ErickSkrauch (810)
2. Akat (264)
3. dendyds (233)
4. Лизка (161)
5. Roshan_ru (110)
6. joker-rus (90)
7. DEMON_CHETS (89)
8. CaFaPuK (71)
9. MOHK223 (64)
10. zelenayasmert)) (55)
11. shumski2 (44)
12. Maus (36)
13. Rase (28)
14. (f)shoker (22)

Топ репутации

1. ErickSkrauch (31)
2. dendyds (25)
3. Akat (19)
4. zelenayasmert)) (10)
5. joker-rus (10)
6. MOHK223 (9)
7. CaFaPuK (8)
8. Makc008 (7)
9. Roshan_ru (7)
10. Maus (5)
11. 3tankista (4)
12. (f)shoker (3)
13. Лизка (3)
14. Raven (3)