|
wait vs timer
|
|
| ErickSkrauch |
Дата: Вторник, 29.03.2011, 19:01 | Сообщение # 1 |
|
|
|
Сообщений: 810

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

|
Замечания:
|
Уважение
[ 10 ]
|
|
|
|
|
АФФТАР ----- АКАТ Для начала небольшой 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:23 | Сообщение # 4 |
|
|
|
Сообщений: 55

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

|
Замечания:
|
Уважение
[ 10 ]
|
|
|
|
|
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 ]
|
|
|
|
|
Quote (ErickSkrauch) Ты или Акат? акат офк
|
|
|
| ErickSkrauch |
Дата: Вторник, 29.03.2011, 19:30 | Сообщение # 8 |
|
|
|
Сообщений: 810

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

|
Замечания:
|
Уважение
[ 10 ]
|
|
|
|
|
то что кинуто, является одним триггером, просто до меня не доходило нужно а) перевести все в джасс(или просто функции в самом верху мапы всунуть, и вызывать спокойно) б)вызвать функции с нужными приписками
|
|
|
| ErickSkrauch |
Дата: Вторник, 29.03.2011, 19:38 | Сообщение # 10 |
|
|
|
Сообщений: 810

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

|
Замечания:
|
Уважение
[ 19 ]
|
|
|
|
|
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 ]
|
|
|
|
|
Ребят, я нифига не понял, скиньте тригер\кусок джаса сюда (с нубскими коментариями к каждому действию).
Windrunner (лиза): Ануфиз сказал кто будет делать кто идиот реборн тот попидет в бань Windrunner (лиза): Если Эрик умрет, за ним акат, то я стану императрицей ESP. Windrunner (лиза): Я взломаю аката, и передам себе власть!
|
|
|
| Akat |
Дата: Вторник, 29.03.2011, 20:08 | Сообщение # 13 |
|
|
|
Сообщений: 264

|
Замечания:
|
Уважение
[ 19 ]
|
|
|
|
|
ErickSkrauch, эм, зелень же кинул мою статью. Там есть все функции и нубские комментарии
|
|
|
| zelenayasmert)) |
Дата: Вторник, 29.03.2011, 20:09 | Сообщение # 14 |
|
|
|
Сообщений: 55

|
Замечания:
|
Уважение
[ 10 ]
|
|
|
|
|
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 ]
|
|
|
|
|
Quote (zelenayasmert))) local timer t = GetExpiredTimer() /// создаем локальный таймер= истекший таймер мы НЕ создаем таймер. Мы создаем локальную переменную - ссылку на истекший таймер. вообще необязательна (и да, как то странно делать локалку для того чтобы её обнулить)
|
|
|
| zelenayasmert)) |
Дата: Вторник, 29.03.2011, 20:16 | Сообщение # 16 |
|
|
|
Сообщений: 55

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

|
Замечания:
|
Уважение
[ 19 ]
|
|
|
|
|
И да, насчет wait, вообще не советую её использовать
|
|
|
| ErickSkrauch |
Дата: Вторник, 29.03.2011, 20:24 | Сообщение # 18 |
|
|
|
Сообщений: 810

|
Замечания:
|
Уважение
[ 31 ]
|
|
|
|
|
Quote (Zelenayasmert))) call TriggerRegisterPlayerEventEndCinematic( t, Player(0) ) /////событие: игрок закончил синематик Какой, к черту, синематик??? Более-менее понял, но! А Хэш тут при чем тогда?
Windrunner (лиза): Ануфиз сказал кто будет делать кто идиот реборн тот попидет в бань Windrunner (лиза): Если Эрик умрет, за ним акат, то я стану императрицей ESP. Windrunner (лиза): Я взломаю аката, и передам себе власть!
|
|
|
| Akat |
Дата: Вторник, 29.03.2011, 20:34 | Сообщение # 19 |
|
|
|
Сообщений: 264

|
Замечания:
|
Уважение
[ 19 ]
|
|
|
|
|
ErickSkrauch, ну смотри, аттачишь например юнита к таймеру, потом по истечению достаешь его из хеша по хендлу таймера и делаешь действия. Ну это так, пример. Иначе по нормальному не получиться сделать действия с юнитом спустя некоторое время
|
|
|
| zelenayasmert)) |
Дата: Вторник, 29.03.2011, 20:34 | Сообщение # 20 |
|
|
|
Сообщений: 55

|
Замечания:
|
Уважение
[ 10 ]
|
|
|
|
|
Quote (ErickSkrauch) А Хэш тут при чем тогда? а хеш это уже совсем другая история© Quote (ErickSkrauch) Какой, к черту, синематик??? ну событие чувак такое поставил(нажатие esc)
|
|
|