Сейчас 03:42:06 Среда, 24 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » PolledWait
PolledWait
CHLSNДата: Пятница, 06 Мая 2011, 00:15:24 | Сообщение # 1
10 уровень
Группа: Проверенные
Сообщений: 1627
Награды: 0
Репутация: 132
Блокировки:
Теоретически, по истечении PolledWait функция должна продолжать выполнение, но вот я не раз сталкивался с тем, что после PolledWait'a выполняется ничего вообще. По моим наблюдениям, при вызове какой-нибудь функции с TriggerSleepAction (коей является и PolledWait), выполнение там и засыпает.

Может просветите, в чем дело?




Я в контакте и на warcraft3ft.info.
Кто может сказать, почему **** дизайнер писал вместо "pt" "px" в CSS, благодаря чему нужно смотреть форум через лупу с Ctrl++?
 

ImpregnableДата: Пятница, 06 Мая 2011, 07:16:37 | Сообщение # 2
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
В функции PolledWait используется таймер => это игровое время. Если остановить игру PauseGame(true), то и все таймеры будут приостановлены.
 

CHLSNДата: Пятница, 06 Мая 2011, 10:44:15 | Сообщение # 3
10 уровень
Группа: Проверенные
Сообщений: 1627
Награды: 0
Репутация: 132
Блокировки:
Quote (CHLSN)
Теоретически, по истечении PolledWait функция должна продолжать выполнение, но вот я не раз сталкивался с тем, что после PolledWait'a выполняется ничего вообще. По моим наблюдениям, при вызове какой-нибудь функции с TriggerSleepAction (коей является и PolledWait), выполнение там и засыпает.

***

Impregnable, я не спрашивал, чем PolledWait отличается от TriggerSleepAction.




Я в контакте и на warcraft3ft.info.
Кто может сказать, почему **** дизайнер писал вместо "pt" "px" в CSS, благодаря чему нужно смотреть форум через лупу с Ctrl++?
 

SirNikolasДата: Пятница, 06 Мая 2011, 11:01:57 | Сообщение # 4
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
В чем дело, ты уже сам убеждался не раз. TriggerSleepAction (как и все ее производные) - глючная функция. Вместо нее нужно использовать таймеры.

 

CHLSNДата: Пятница, 06 Мая 2011, 11:41:06 | Сообщение # 5
10 уровень
Группа: Проверенные
Сообщений: 1627
Награды: 0
Репутация: 132
Блокировки:
SirNikolas, хорошо, тогда вопрос, а-ля by Кэп:
Code
local timer t = CreateTimer()
local effect e = CreateEffect()
....
<Wait 8 s.>
DestroyEffect( e )
set e = null
set t = null

Чтобы лишь разрушить что либо через Х секунд, нужно:
1. Создавать таймер
2. Функцию для таймера
3. Заносить в хеш (+2 вызова функции)
4. Разрушать таймер
? И это для каждой такой функции, где нужно подождать?




Я в контакте и на warcraft3ft.info.
Кто может сказать, почему **** дизайнер писал вместо "pt" "px" в CSS, благодаря чему нужно смотреть форум через лупу с Ctrl++?
 

SirNikolasДата: Пятница, 06 Мая 2011, 12:16:54 | Сообщение # 6
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Code
globals
     constant hashtable udg_Hash = InitHashtable()
endglobals

function DestroyObject_Timer takes nothing returns nothing
     local timer t = GetExpiredTimer()
     local integer id = GetHandleId(t)
     local string s = LoadStr(udg_Hash, id, 1)
     if s == "effect" then
         call DestroyEffect(LoadEffectHandle(udg_Hash, id, 0))
     elseif s == "unit" then
         call RemoveUnit(LoadUnitHandle(udg_Hash, id, 0))
     elseif s == "destructable" then
         call RemoveDestructable(LoadDestructableHandle(udg_Hash, id, 0))
     elseif s == "item" then
         call RemoveItem(LoadItemHandle(udg_Hash, id, 0))
     //
     endif
     call FlushChildHashtable(udg_Hash, id)
     call DestroyTimer(t)
     set t = null
endfunction

function DestroyObject takes handle h, string objectType, real time returns nothing
     local timer t = CreateTimer()
     local integer id = GetHandleId(t)
     if time < .0 then
         set time = -time
     endif
     call SaveAgentHandle(udg_Hash, id, 0, h)
     call SaveStr(udg_Hash, id, 1, objectType)
     call TimerStart(t, time, false, function DestroyObject_Timer)
     set t = null
endfunction

Добавлено (06-05-2011, 12:16)
---------------------------------------------
Вместо string objectType можно использовать integer objectType:
if objectType == 1 then DestroyEffect
elseif objectType == 2 then RemoveUnit
elseif objectType == 3 then RemoveDestructable
и т. д.


 

ImpregnableДата: Пятница, 06 Мая 2011, 12:21:51 | Сообщение # 7
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
CHLSN так не делается... Понять по описанию где ошибка довольно тяжело. Дал бы хоть какой-нибудь пример.

Вообщем TriggerSleepAction() нельзя вставлять в функцию:
-условия триггера TriggerAddCondition(,)
-инициализации триггера InitTrig_...
-фильтра и во все подобное

 

CHLSNДата: Пятница, 06 Мая 2011, 12:44:46 | Сообщение # 8
10 уровень
Группа: Проверенные
Сообщений: 1627
Награды: 0
Репутация: 132
Блокировки:
Impregnable, цитирую:
Quote (CHLSN)
По моим наблюдениям, при вызове какой-нибудь функции с TriggerSleepAction (коей является и PolledWait), выполнение там и засыпает.

Хотя в общем-то нередко и в "основной" функции триггера.

SirNikolas, а если нужно не только разрушить один определенный тип, а проделать еще несколько различных действий?




Я в контакте и на warcraft3ft.info.
Кто может сказать, почему **** дизайнер писал вместо "pt" "px" в CSS, благодаря чему нужно смотреть форум через лупу с Ctrl++?
 

lawsonДата: Пятница, 06 Мая 2011, 13:38:15 | Сообщение # 9
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
CHLSN,
Ууу это значит ты еще нормально не кодил. если спрашиваешь что для каждой функции делать таймер.

Добавлено (06-05-2011, 13:38)
---------------------------------------------

Quote (CHLSN)
а если нужно не только разрушить один определенный тип, а проделать еще несколько различных действий?

Можешь сделать в нестандартном коде функцию в которой для каждого выполнения действия нужно указать boolean выполнять ее или нет.


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

DragoNДата: Пятница, 06 Мая 2011, 13:38:28 | Сообщение # 10
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
не юзайте вы полледвэйт, это же убогая вещь!

El Psy Congroo
 

SirNikolasДата: Пятница, 06 Мая 2011, 14:03:48 | Сообщение # 11
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (lawson)
Можешь сделать в нестандартном коде функцию, в которой для каждого выполнения действия нужно указать boolean: выполнять ее или нет.
Тогда уж лучше для каждого действия сделать функцию. Нагрузка будет больше, зато код сократится.


 

CHLSNДата: Пятница, 06 Мая 2011, 14:16:10 | Сообщение # 12
10 уровень
Группа: Проверенные
Сообщений: 1627
Награды: 0
Репутация: 132
Блокировки:
Quote (lawson)
Можешь сделать в нестандартном коде функцию в которой для каждого выполнения действия нужно указать boolean выполнять ее или нет.

Издеваешься что ли? Русским по черному написал - несколько - различных - действий. Если после Wait будет 10 абсолютно разных действий, и все используют разные типы?, 10 булевых писать?
Quote (SirNikolas)
зато код сократится

Наоборот.

DragoN, абсолютно согласен.

Я боюсь, что я один догадываюсь о создании одной функции для разрушения, в то время как в остальных придется писать таймеры "вручную" ? А-ля баланс между размером кода, и количеством вызываемых функций?




Я в контакте и на warcraft3ft.info.
Кто может сказать, почему **** дизайнер писал вместо "pt" "px" в CSS, благодаря чему нужно смотреть форум через лупу с Ctrl++?


Сообщение отредактировал CHLSN - Пятница, 06 Мая 2011, 14:16:40
 

SirNikolasДата: Пятница, 06 Мая 2011, 14:24:41 | Сообщение # 13
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (SirNikolas)
зато код сократится.
Взять ту же DestroyObject: если ты вызываешь ее раз пять, то код получается короче, чем если бы ты эти пять раз писал ее вручную.

Добавлено (06-05-2011, 14:24)
---------------------------------------------

Quote (CHLSN)
А-ля баланс между размером кода и количеством вызываемых функций?
В точку.


 

CHLSNДата: Пятница, 06 Мая 2011, 14:54:46 | Сообщение # 14
10 уровень
Группа: Проверенные
Сообщений: 1627
Награды: 0
Репутация: 132
Блокировки:
SirNikolas, про сокращение понял, вроде, что ты имел ввиду.

Как итог: ...тему в топку, используй таймеры. Всем спасибо)





Я в контакте и на warcraft3ft.info.
Кто может сказать, почему **** дизайнер писал вместо "pt" "px" в CSS, благодаря чему нужно смотреть форум через лупу с Ctrl++?


Сообщение отредактировал CHLSN - Пятница, 06 Мая 2011, 16:23:20
 

DreiiДата: Пятница, 06 Мая 2011, 15:57:43 | Сообщение # 15
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
Что бы не едлать каждый раз функцию для таймера сделай ее в нестандартном коде и все ^_^

 

lawsonДата: Пятница, 06 Мая 2011, 17:35:14 | Сообщение # 16
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (CHLSN)
Как итог: ...тему в топку, используй таймеры. Всем спасибо)

Офигеть, сам создал тему сам задал вопрос а теперь всем другим объясняещь что Вэит это плохо.
Тебе до этого было сказано да и вообще везде всегда пишут таймеры, а ты раздул эту проблему на десятку постов.
Я вообще не понимаю в чем проблема, я всегда писал отдельные функции для таймеров и все нормально работало.


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!


Сообщение отредактировал lawson - Пятница, 06 Мая 2011, 17:38:17
 

CHLSNДата: Пятница, 06 Мая 2011, 18:40:50 | Сообщение # 17
10 уровень
Группа: Проверенные
Сообщений: 1627
Награды: 0
Репутация: 132
Блокировки:
lawson, ничего ты не шаришь в разборе проблемы. Раз тема на 10 постов, значит так и должно быть. И я ничего не объяснял, а просто систематизировал все здесь сказанное, как вывод, получил исчерпывающий ответ на поставленный вопрос.

Quote (lawson)
Я вообще не понимаю в чем проблема, я всегда писал отдельные функции для таймеров и все нормально работало.

Значит ты плохо читал данную тему. Вопрос в том, насколько быстроработающей будет карта.




Я в контакте и на warcraft3ft.info.
Кто может сказать, почему **** дизайнер писал вместо "pt" "px" в CSS, благодаря чему нужно смотреть форум через лупу с Ctrl++?
 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » PolledWait
  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz