Влияние таймеров на игру

Faith

Пользователь
8 Сен 2016
18
0
Где-то слышал, что либа таймеров от barebones , при достаточном количестве - дропает фпс. Правда ли? Стал замечать что в моей моде происходят такие дропы.
Например, вместо motion-контроллеров я использую функцию такого рода.
Код:
function MotionFunc( ... )
  local caster,direction,distance,duration,stun = ...
  local tick = 0.02
  local dur = 0
  local point
  local speed = distance / duration * tick
  caster:AddNewModifier(nil, nil, "modifier_phased", {duration=duration})
  if stun then
    caster:AddNewModifier(nil, nil, "modifier_stunned", {duration=duration})
  end
  Timers:CreateTimer(function()
    if dur < duration then
      dur = dur + tick
      local caster_location = caster:GetAbsOrigin()
      point = caster_location + speed * direction
      caster:SetAbsOrigin(point)
      return tick
    else
      FindClearSpaceForUnit(caster, caster:GetAbsOrigin(), false)
    end
  end)
end

Так-же использую увеличение стаков на модификаторах через подобный способ. И еще всякие прикалюхи типо увеличения статов, атаки и прочей прочей фигни. Все это работает через таймеры. При использовании способностей, особенно сразу нескольких - фпс дропается примерно на 5-10, боюсь если продолжу делать так - то фпс и вовсе будет неиграбельным :-\
 
Последнее редактирование модератором:

Илья

Друзья CG
25 Сен 2015
2,348
41
Я без понятия, что там у BMD, не смотрел его библиотеку, но когда нашел стандартные valve счетчики (thinkers), пользуюсь ими. Думаю, он через них так же свою библиотеку реализовывал (просто сделал удобнее их применение, может попытался оптимизировать). Тут вон в конце урок с ними еще есть.
 

MahouShoujo

Продвинутый
3 Ноя 2016
251
23
Если дропается значит что что-то сделано коряво, сами таймеры так повлиять не могут при нормальном использовании. А вот thinker'ы - могут. Каждый thinker - это сущность, которая еще и с сервера приходит на клиент, недавно у разработчиков SWAT Reborn были проблемы с тем что у них 600 думалок было на карте и все дико начинало лагать. Timers сделаны на одном thinker'е, т.е. очень правильно и быстро.
 

Faith

Пользователь
8 Сен 2016
18
0
Если дропается значит что что-то сделано коряво, сами таймеры так повлиять не могут при нормальном использовании. А вот thinker'ы - могут. Каждый thinker - это сущность, которая еще и с сервера приходит на клиент, недавно у разработчиков SWAT Reborn были проблемы с тем что у них 600 думалок было на карте и все дико начинало лагать. Timers сделаны на одном thinker'е, т.е. очень правильно и быстро.
Интересно, у меня есть несколько AI-шек крипов, сделанных как-раз таки на thinker'ах. Может быть в этом и проблема? Но их явно не 600, даже 30 не наберется...
 
Последнее редактирование модератором:

Илья

Друзья CG
25 Сен 2015
2,348
41
Timers сделаны на одном thinker'е, т.е. очень правильно и быстро.

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

CryDeS

Друзья CG
14 Июл 2015
1,210
11
Я так понимаю, BMD создает метатаблицу для всех функций и времени их активации, что создают используя его таймер, после чего просто в надлежащее время активирует ту или иную функцию? А как он выкручивается, когда время у двух объектов совпадает?
У каждого таймера у bmd есть свое имя, причем уникальное(см. DoUniqueString).
Потом в таблице хранится имя= { время_до_след_активации, функция}
И каждый тик времени из время_до_след_активации вычитается тик, если время = 0, то функция исполняется и возвращает значения до след времени. Если время = nil, таймер удаляется из таблицу. После этого все перейдет к след. элементу таблицы.
 
Последнее редактирование модератором:

MahouShoujo

Продвинутый
3 Ноя 2016
251
23
Гспди... Какие метатаблицы, о чем ты, зачем ты говоришь терминами, которых не понимаешь? Ты думаешь что совпадении времени можно корректно обработать? Thinker'ы тоже не на магии работают.

Работают точно так же как и thinker'ы которые обрабатываются каждый тик и опрашиваются на соответствие времени целевому времени. Просто на одной энтити.

И по факту работает не так, как написал крайдес, учитесь читать код. Ничего там не вычитается. Просто сохраняется следующий момент времени когда таймер должен отработать.
Поэтому если внезапно время скакнет вперед то таймер отработает за все те тики, что он пропустил. Такого можно добиться если заставить время идти на паузе, например.
 

Илья

Друзья CG
25 Сен 2015
2,348
41
Ну, собственно, вы оба повторили то, что я имел в виду, только в деталях.

Тогда напрашивается следующий вопрос: почему valve изначально не сделали работу счетчиков на одной сущности, раз таймеры BMD работают по такому принципу и якобы лучше счетчиков?

P.S. про метатаблицы: я работал с ними в геоинформационной конторе еще будучи студентом, так что я знаю, где и как можно их употреблять.
 

MahouShoujo

Продвинутый
3 Ноя 2016
251
23
Челик успокойся ты свой многолетний опыт повсюду приписываешь но в итоге нифига не знаешь. Почитай если знаешь английский на досуге) https://www.lua.org/pil/13.html

> Тогда напрашивается следующий вопрос: почему valve изначально не сделали работу счетчиков на одной сущности, раз таймеры BMD работают по такому принципу и якобы лучше счетчиков?

Потому что вальв насрать на то что там в луа который они не используют? Ору с ЯКОБЫ, хотя конечно не понимая как это работает внутри судя по твоему вопросу о срабатывании счетчиков в одно время удивляться нечему.
 
Последнее редактирование модератором:

Илья

Друзья CG
25 Сен 2015
2,348
41
Опыт у меня не многолетний.

Чтож, раз нет подводных камней, тогда таймеры действительно лучше счетчиков.
 
Реклама: