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

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

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

offline
Опыт: 34,834
Активность:
Задержка при выполнении кода
К примеру, есть основной триггер Х, а также тригеры Y, Z у всех одинаковые события и условия:
Код:
globals
boolean bool = true
endglobals
//---------------------------------
function X_Condition takes nothing returns boolean
  return bool
endfunction

function X_Action takes nothing returns nothing
...
set bool = false
endfunction
//---------------------------------
function Y_Condition takes nothing returns boolean
  return (bool and GetUnitAbilityLevel(...)>0)
endfunction
//---------------------------------
function Z_Condition takes nothing returns boolean
  return (bool and GetUnitAbilityLevel(...)>0)
endfunction

Что нужно поставить вместо ... в дейтсвии тригера X, чтобы условия тригеров Y и Z успели сработать? TriggerSleepAction не подоходит, 0.1 слишком большой инетрвал. таймеры не предлагать.

Отредактировано agentex, 20.12.2008 в 12:25.
Старый 20.12.2008, 11:28
J
expert
offline
Опыт: 48,447
Активность:
если у них одинаковые события и условия то не проще ли сделать один триггер с такимже событием, и с такимже условием, но с 3-мя действиями?
Старый 20.12.2008, 11:57
agentex

offline
Опыт: 34,834
Активность:
неа не проще, я бы так и сделал если бы была возможность..
ну хорошо если поставить одно условие у всех, все равно какойто триггер раньше сработает? или как?
Старый 20.12.2008, 12:12
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
Я не вижу, что мешает сделать так, как говорит джон?
Старый 20.12.2008, 12:16
agentex

offline
Опыт: 34,834
Активность:
да вы не поняли, условия не совсем одинаковые, условия тригеров Y, Z содержат условие if bool, но к томуже у них еще свои условия есть

agentex добавил:
вот исправил 1 пост
Старый 20.12.2008, 12:25
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
ну так а что мешает делать проверку на дополнительные условия после запуска действий Y и Z?
Старый 20.12.2008, 12:29
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
agentex, вставить if/then/else в действиях нельзя?
Старый 20.12.2008, 12:33
J
expert
offline
Опыт: 48,447
Активность:
я неуверен но попробуй так
Код:
function X_Action takes nothing returns nothing
...
set bool = false
endfunction
замени на:
Код:
function X_Action_Timer takes nothing returns nothing
    ...
    set bool = false
    call DestroyTimer(GetExpiredTimer())
endfunction
function X_Action takes nothing returns nothing
    call TimerStart(CreateTimer(), 0, false, function X_Action_Timer)
endfunction
таймеров тут чуть, не помреш, но всеже сначало проверь, т.к. я неуверен что будет работать, да и вообще я както сомневаюсь в вопросе, имхо, можно сделать так что этой проблемы вообще не будет

Отредактировано Jon, 20.12.2008 в 12:59.
Старый 20.12.2008, 12:37
agentex

offline
Опыт: 34,834
Активность:
помру не я а карта ) события UNIT DAMAGED и могут выполняться несколько десятков раз в секунду =)
Hellfim, Van Damm не хочу засорять действия.

Jon у меня под bool подразумевается функция, возвращающая boolean, с аргументами GetEventDamageSource и GetTriggerUnit
Старый 20.12.2008, 12:45
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
Выход с проверкой на входе в действие, считаю наиболее актуальным. и наименее нагружающим =)
Старый 20.12.2008, 13:02
agentex

offline
Опыт: 34,834
Активность:
Ладно, тогда еще один вопрос, косвенно относящийся к теме: События, добавляющиеся в триггер по ходу игры, много ли занимают памяти, и могут привести к торможению?
Старый 20.12.2008, 13:06
ScorpioT1000
Работаем
offline
Опыт: отключен
скажи конкретно задачу и что требуется получить в результате (который раз говорю)
Старый 20.12.2008, 15:42
Vadim

offline
Опыт: 603
Активность:
Цитата:
События, добавляющиеся в триггер по ходу игры, много ли занимают памяти, и могут привести к торможению?


Делал когда-то тест, с событием UNIT_DAMAGED и с диспетчером задач, получилось, что одно событие занимало 0.49 килобайта.
Старый 20.12.2008, 20:05
agentex

offline
Опыт: 34,834
Активность:
многовато (

agentex добавил:
интересно сколько вар выделяет памяти на это, или при нехватке она увеличивается?

agentex добавил:
посчитал: 100 мб = гдето 204 тыщи событий
Старый 20.12.2008, 20:21
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
есть основной триггер Х, а также тригеры Y, Z у всех одинаковые события

а зачем три тригера, которые реигируют на одно и тоже? просто слпите условия и действия как вам надо и делов то...
Старый 21.12.2008, 12:11
adic3x

offline
Опыт: 108,439
Активность:
ага, но дык это тру решение... я вообще хз что невыодит у автора...
Старый 21.12.2008, 13:25
J
expert
offline
Опыт: 48,447
Активность:
Код:
local trigger trig = CreateTrigger()
call TriggerRegisterAnyEvent(trig, ...)
call TriggerAddCondition(trig, Condition( function Trig_Conditions))
call TriggerAddAction(trig, function Trig_Actions1)
call TriggerAddAction(trig, function Trig_Actions2)
call TriggerAddAction(trig, function Trig_Actions3)

действия будут выполнтся в порядке добовления
Старый 21.12.2008, 13:35
adic3x

offline
Опыт: 108,439
Активность:
Код:
func Action
 if A then
  // a actions
 endif
 if B then
  // b actions
 endif
 if C then
  // c actions
 endif
endfunc
Старый 21.12.2008, 13:37
agentex

offline
Опыт: 34,834
Активность:
Jon повторяю условия разные
ADOLF и что при вызове другой функции сохранятся данные события выполняющегося триггера? (DamageSource, TriggerUnit, EventDamage) ?

а ну понял ты предлагаешь напрямую выполнять действия какие надо, но у меня экшенов будет становиться все больше, и они не по 1 -2 строчки, там есть сложные конструкции.

Отредактировано ShadoW DaemoN, 30.12.2008 в 19:16.
Старый 21.12.2008, 13:41
J
expert
offline
Опыт: 48,447
Активность:
есть мнение что ты роешся не там где надо, скажи что должно быть в результате
Старый 21.12.2008, 13:46
Закрытая тема

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

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

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

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



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